Postgresql - Tìm kiếm tiếng việt không dấu


Postgresql - Tìm kiếm tiếng việt không dấu

Khi một developer thao tác với Database Postgresql có dữ liệu là tiếng Việt. Công việc khó khăn phát sinh khi muốn so sánh, tìm kiếm chuỗi có dấu và chuỗi không dấu.
Bài viết này tôi sẽ đưa ra 2 cách để convert tiếng Việt có dấu thành không dấu trong Postgresql:

  1. Cách đầu tiên là viết 1 function convert thủ công để replace
  2. Cách thứ hai là dùng hàm có sẵn được hỗ trợ: Unaccent

1. Tạo function convert

Với cách này, sẽ giúp bạn hình dung cơ chế convert tiếng Việt có dấu thành không dấu như thế nào. Khi bạn muốn convert language này sang language khác cũng có thể làm như này. Ngoài ra, nó còn giúp ta maintance tốt hơn, chủ động hơn. Nhược điểm của nó là tốc độ có thể chậm hơn so với cách thứ 2.

// convert TV khong dau
CREATE OR REPLACE FUNCTION convertTVkdau (x text) RETURNS text AS 
$$
DECLARE
   codau text; kdau text; r text;
BEGIN
   codau = 'áàảãạâấầẩẫậăắằẳẵặđéèẻẽẹêếềểễệíìỉĩịóòỏõọôốồổỗộơớờởỡợúùủũụưứừửữựýỳỷỹỵÁÀẢÃẠÂẤẦẨẪẬĂẮẰẲẴẶĐÉÈẺẼẸÊẾỀỂỄỆÍÌỈĨỊÓÒỎÕỌÔỐỒỔỖỘƠỚỜỞỠỢÚÙỦŨỤƯỨỪỬỮỰÝỲỶỸỴ';
   kdau  = 'aaaaaaaaaaaaaaaaadeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyyAAAAAAAAAAAAAAAAADEEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYY';
   r = x;
   FOR i IN 0..length(codau)
   LOOP
        r = replace(r, substr(codau,i,1), substr(kdau,i,1));
   END LOOP;
   RETURN r;
END;
$$ LANGUAGE plpgsql;

Sau đó, ta sẽ thử áp dụng function trên với câu select sau:

SELECT converttvkdau('Phần mềm quản lý quán net');

Thì sẽ nhận được kết quả:

Phan mem quan ly quan net

2. Dùng hàm có sẵn Unaccent

Trước hết để sử dụng được hàm Unaccent này cần tạo Extension

CREATE EXTENSION unaccent;
SELECT unaccent('Phần mềm quản lý quán net');

Kết quả sẽ tương tự cách 1

Chú ý quan trọng:

Để sử dụng hàm unaccent này tốt cho tiếng Việt bạn sẽ cần bổ sung , chính sửa thêm vào file unaccent.rules
Nếu ở centos, các bạn vào thư mục "/usr/pgsql-9.6/share/tsearch_data" sửa
Nếu ở windows, thì vào thư mục "C:/Program Files/PostgreSQL/9.6/share/tsearch_data"

Link github: https://github.com/phuongnm153/postgres/blob/master/contrib/unaccent/unaccent.rules

Link download file tại đây



ISEA .,JSC

Cung cấp phần mềm quản lý doanh thu quán net chuyên nghiệp

Điện thoại

082.33.99.333