Search tiếng Việt - mongoose
-
@Hải-Nguyễn215 cái này bạn để trống hoặc mặc định ko điền gì cũng được (vì chưa có mô hình cho tiếng Việt thì phải). Việc định rõ languague giúp việc tìm kiếm hiệu quả và chính xác hơn, do áp dụng 1 vài kỹ thuật NLP (stemming, tokenization, ...)
-
@Vũ em có check thì thấy nó ko nhận key có chứa "Đ" như đặng mình gõ là dang thì nó ko tìm ra.
-
@Hải-Nguyễn215 Đúng là chữ
Đ
mình cũng ko tìm thấy, mặc dù chỉ định rõ{ $language: 'none', $diacriticSensitive: false, $caseSensitive: false }
. Ko biết có gì đặc biệt ở đây nhỉ. -
Mongodb hiện tại chưa hỗ trợ search tiếng Việt nhé
https://docs.mongodb.com/manual/reference/operator/query/text/
https://docs.mongodb.com/manual/reference/text-search-languages/#text-search-languages
Nó có tốc độ truy vẫn, thêm bớt, sửa xóa cao nên thôi chấp nhận một số chức năng thiếu hụt so với các loại db khác
Giải pháp ở đây bạn có thể thêm filed rồi trim hết unicode trên đó đi rồi search trên đó -
@Khoa-Lê-Duy Ở đây mình nghĩ bộ tokenizer mặc định của mongodb ko nhận diện được chữ
Đ
, nó mà mở cho cắm plugins vào thì ngon :)) -
@Vũ Theo logic thì mình nghĩ là các bảng mã nó cơ bản là giống nhau.
Cùng cái base đó.(Mượn nhặt của nhau mà)
Nhưng một số ký tự nó hơi đặc biệt nên nó cũng được đối xử 1 cách đặc biệt
Nên chữ "Đ" ở đây nó không nhận được
Mongodb nó đã chỉ rõ là không hỗ trợ tiếng Việt rùi nhưng do mấy bạn không đọc hết doc của nó nên làm bừa(ờ mà mình cũng chưa đọc hết)
Ngay cả những db gạo cội khác dev cũng thấy khoai khi làm full text search.https://github.com/tyxla/remove-accents/blob/master/index.js
Hy vọng link này sẽ giúp ích chút nhiều cho ai đó đang châm cứu vấn đề này
Ai làm được mình xin trân thành cảm ơn và công đồng nodejs.vn sẽ hậu tạ -
Mình cũng đang bị vướng ở vấn đề này, mong có cao nhân giúp đỡ.
-
@Khoa-Lê-Duy Nguyên lý chung nhau, chứ bảng mã ko giống nhau. Đối với tiếng Việt thì nó nằm ở rất nhiều dải khác nhau :))
- Basic Latin {U+0000..U+007F},
- Latin-1 Supplement {U+0080..U+00FF},
- Latin Extended-A, -B {U+0100..U+024F},
- Latin Extended Additional {U+1E00..U+1EFF},
- Combining Diacritical Marks {U+0300.. U+036F}.
- Vietnamese đồng currency symbol is ₫ (U+20AB)
Tham khảo: http://vietunicode.sourceforge.net/charset/
Ban đầu mình có nhắc là ko hỗ trợ tiếng Việt :)) Vì bộ tokenizer, stop words của mình nó khác, tiếng Việt thì ko cần stemming, còn bộ xếp hạng chấm điểm thì phải nghĩ.
Phương án hiện tại, có lẽ lưu thêm 1 trường không dấu nữa.
Còn lâu dài, chắc cần có Nerds viết plugin cho Mongo
-
@Vũ Cái này hơi sâu so với nội công của mình rồi mod
Nhưng thanks mod về cái link charset
Chắc có nhiều thứ nó lòi ra từ cái bảng mã trên
Mình có 1 bảng nhưng nó không đủ như này
Vấn đề bảng mã cũng hơi lằng nhằng.
Chắc full text search được tiếng mẹ đẻ cũng cần cao thủ hơn nữa
Chui xuống tầng sâu hơn nữa để điều chế bảng mãMà giờ cũng thấm nhuần câu của các cụ
Phong ba bão táp không bằng ngữ pháp Việt Nam
May mà các cụ ngày xưa đổi chữ Nôm thành chữ Quốc Ngữ
Không giờ con cháu tha hồ mà chém gió :)) -
Đã có bạn nào giải quyết vấn đề này hoàn chỉnh chưa vậy, mình tạo text index thì nó báo là "language override unsupported: vi" lúc save object.
Code tạo text index của mình như sau:
Schema.index({ title: 'text', body: 'text' }, { name: 'My text index', weights: { title: 4, body: 3 }}); -
@Acenter-Ha
Bạn qua bên này nhé https://nodejs.vn/topic/1230/thư-viện-fulltextsearch-chắc-chỉ-hỗ-trợ-tiếng-việt
Cái này mình không can thiệp bên mongodb
Mình dùng nodejs để tạo ra các kết quả giả địnhVí dụ: từ "duoc"
nó sẽ ra "duoc|đuoc|dùoc|dủoc|dũoc|dúoc|dụoc|dưoc|dừoc|dửoc|...."
Ít nhiều ảnh hưởng tới hiệu xuất
nhưng hiện tại nó giải quyết được bài toán của mìnhHy vọng bạn nào đó có thuật toán để loại bỏ các từ vô nghĩa như 'duoc|đuoc|dùoc|dủoc|dũoc|dúoc|dụoc|dưoc|dừoc|dửoc..."
Để nó chỉ ra các từ có nghĩa như
được|dược|... -
Em đã quay trở lại ^^ không biết đã có phát hiện gì mới về full text search trong mongodb chưa ạ ^^
-
Nhanh vậy, đã 2 năm :))