Search tiếng Việt - mongoose


  • Global Moderator

    @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ỉ.

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    0


  • 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 đó


  • Global Moderator

    @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 :))

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    0


  • @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 đỡ.


  • Global Moderator

    @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 :)

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    2


  • @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ả định

    Ví 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ình :(

    Hy 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|...


Log in to reply