3

Đề xuất, đôi khi được gọi là tự động đề xuất, tìm kiếm trước hoặc tự động hoàn thành, hiện là một tính năng tìm kiếm thiết yếu kể từ khi Google thêm nó gần  5 năm trước

Lucene có một số triển khai; Tôi  đã mô tả trước đây AnalyzingSuggester . Kể từ đó,  FuzzySuggester cũng được thêm vào, mở rộng  AnalyzingSuggester bằng cách chấp nhận các đầu vào sai chính tả. 

Ở đây tôi mô tả suggester mới nhất của chúng tôi :  AnalyzingInfixSuggester, bây giờ trải qua các lần lặp lại về   vấn đề LUCENE-4845 Jira. 

Không giống như các đề xuất hiện có, thường tìm thấy các đề xuất có toàn bộ tiền tố khớp với đầu vào của người dùng hiện tại, suggester này sẽ tìm thấy các mã thông báo phù hợp ở bất cứ đâu trong đầu vào của người dùng và trong đề xuất; đây là lý do tại sao nó có  Infix  trong tên của nó. 

Bạn có thể thấy nó hoạt động tại  ví dụ ứng dụng tìm kiếm Jira  mà  tôi đã xây dựng để giới thiệu các tính năng khác nhau của Lucene

Ví dụ: nếu bạn nhập,  japan bạn sẽ thấy các vấn đề khác nhau được đề xuất, bao gồm:

  • SOLR-4945: Tự động hoàn thành và Highlighter của Nhật Bản bị hỏng
  • LUCENE-3922: Thêm chuẩn hóa số Kanji Nhật Bản vào Kuromoji
  • LUCENE-3921: Thêm khả năng phân hủy hợp chất Katakana của Nhật Bản vào Kuromoji

Như bạn có thể thấy, các ký tự đến có thể khớp không chỉ là tiền tố của mỗi đề xuất mà còn là tiền tố của bất kỳ mã thông báo nào bên trong. 

Không giống như các đề xuất hiện có, suggester mới này không sử dụng cấu trúc dữ liệu chuyên biệt như  FST . Thay vào đó, đó là một chỉ số Lucene "thông thường", sử dụng EdgeNGramTokenFilter để lập chỉ mục các tiền tố ngắn của mỗi mã thông báo, lên đến độ dài 3 theo mặc định, để truy vấn tiền tố nhanh. 

Nó cũng sử dụng  API trình sắp xếp chỉ mục mới  để sắp xếp trước tất cả các bài đăng theo trọng số được đề xuất tại thời điểm chỉ mục và tại thời điểm tra cứu sử dụng một tùy chỉnh  Collector để dừng sau khi tìm thấy các lần truy cập N khớp đầu tiên vì các lần truy cập này phù hợp nhất khi sắp xếp theo trọng số. Phương pháp tra cứu cho phép bạn chỉ định liệu tất cả các thuật ngữ phải được tìm thấy hay bất kỳ thuật ngữ nào (Tìm kiếm Jira  yêu cầu tất cả các điều khoản). 

Do các đề xuất được sắp xếp chỉ theo trọng lượng và không có tiêu chí liên quan nào khác, nên trình duyệt này phù hợp với các ứng dụng có trọng số a-prori mạnh cho mỗi đề xuất, chẳng hạn như đề xuất xếp hạng công cụ tìm kiếm phim theo mức độ phổ biến, độ trễ hoặc pha trộn , cho mỗi bộ phim. Trong tìm kiếm Jira,  tôi xếp hạng từng đề xuất (vấn đề Jira) theo cách nó được cập nhật gần đây. 

Cụ thể, không có hình phạt nào đối với các đề xuất có mã thông báo phù hợp ngay từ đầu, điều đó có thể có nghĩa là mức độ liên quan kém trong một số trường hợp; một cách tiếp cận khác (bản vá là về vấn đề) thay vào đó sử dụng các FST, có thể yêu cầu các mã thông báo phù hợp nằm trong ba mã thông báo đầu tiên, ví dụ. Điều này cũng có thể với AnalyzingInfixSuggester sử dụng bộ phân tích thời gian chỉ số đã loại bỏ tất cả trừ ba mã thông báo đầu tiên. 

Một lợi ích tuyệt vời của cách tiếp cận dựa trên chỉ mục là  AnalyzingInfixSuggester xử lý làm nổi bật các mã thông báo phù hợp (màu đỏ, ở trên), điều  không may được chứng minh là khó cung cấp với các đề xuất dựa trên FST. Về mặt lý thuyết, một lợi ích khác là suggester có thể hỗ trợ lập chỉ mục gần như thời gian thực, nhưng tôi đã không tiết lộ rằng trong bản vá hiện tại và có lẽ sẽ không có thời gian (bản vá chào mừng!). 

Hiệu suất là hợp lý: ở đâu đó giữa  AnalyzingSuggester và  FuzzySuggester, giữa 58 - 100 kQPS (chi tiết về  vấn đề này ). 

Phân tích thú vị

Cũng như  AnalyzingSuggesterAnalyzingInfixSuggester hãy để bạn định cấu hình riêng biệt các máy phân tích thời gian tìm kiếm so với thời gian tìm kiếm. Với  tìm kiếm Jira, Tôi đã bật loại bỏ từ dừng tại thời điểm chỉ mục, nhưng không phải lúc tìm kiếm, do đó, một truy vấn như thế  or vẫn sẽ tìm thấy thành công bất kỳ đề xuất nào có chứa các từ bắt đầu  or, thay vì bỏ hoàn toàn cụm từ. 

Bạn nên sử dụng suggester nào cho ứng dụng của bạn? Không thể nói! Bạn sẽ phải kiểm tra từng sản phẩm của Lucene và chọn một sản phẩm. Tự động đề xuất là một lĩnh vực mà một kích cỡ không phù hợp với tất cả, vì vậy thật tuyệt khi Lucene đang chọn một số triển khai cạnh tranh. Dù bạn sử dụng, xin vui lòng  cung cấp cho chúng tôi thông tin phản hồi  để chúng tôi có thể lặp lại và cải thiện hơn nữa!

|