2011-08-22 29 views
17

Tôi đang sử dụng kết hợp mờ trong dự án của tôi chủ yếu để tìm lỗi chính tả và cách viết khác nhau của cùng tên. Tôi cần phải hiểu chính xác cách kết hợp mờ của công cụ tìm kiếm đàn hồi và cách nó sử dụng 2 thông số được đề cập trong tiêu đề.elasticsearch fuzzy matching max_expansions & min_similarity

Khi tôi hiểu được min_similarity là phần trăm theo đó chuỗi được truy vấn khớp với chuỗi trong cơ sở dữ liệu. Tôi không thể tìm thấy mô tả chính xác về cách tính giá trị này.

max_expansions như tôi hiểu là khoảng cách Levenshtein mà tìm kiếm sẽ được thực thi. Nếu đây thực sự là khoảng cách Levenshtein thì nó sẽ là giải pháp lý tưởng cho tôi. Dù sao, nó không làm việc ví dụ tôi có từ "Samvel"

queryStr  max_expansions   matches? 
samvel  0      Should not be 0. error (but levenshtein distance can be 0!) 
samvel  1      Yes 
samvvel  1      Yes 
samvvell  1      Yes (but it shouldn't have) 
samvelll  1      Yes (but it shouldn't have) 
saamvelll  1      No (but for some weird reason it matches with Samvelian) 
saamvelll  anything bigger than 1 No 

Các tài liệu nói điều gì đó tôi thực sự không hiểu:

Add max_expansions to the fuzzy query allowing to control the maximum number 
of terms to match. Default to unbounded (or bounded by the max clause count in 
boolean query). 

Vì vậy, có thể hài lòng bất cứ ai giải thích cho tôi như thế nào một cách chính xác các thông số ảnh hưởng đến kết quả tìm kiếm.

Trả lời

21

min_similarity là giá trị giữa 0 và 1. Từ tài liệu Lucene:

For example, for a minimumSimilarity of 0.5 a term of the same length 
as the query term is considered similar to the query term if the edit 
distance between both terms is less than length(term)*0.5 

'Khoảng cách chỉnh sửa' được gọi là Levenshtein distance.

Cách truy vấn này hoạt động trong nội bộ là:

  • nó tìm thấy tất cả các điều khoản mà tồn tại trong chỉ mục mà có thể phù hợp với từ khóa tìm kiếm, khi lấy min_similarity vào tài khoản
  • sau đó nó tìm kiếm cho tất cả những điều kiện.

Bạn có thể tưởng tượng mức độ truy vấn này có thể là bao nhiêu!

Để chống lại điều này, bạn có thể đặt tham số max_expansions để chỉ định số lượng tối đa các cụm từ đối sánh cần được xem xét.

+0

ah, sau đó max_expansions và min_similarity nên được sử dụng cùng nhau. vì vậy giới hạn khoảng cách thực tế được thực hiện bởi 'min_similarity' và' max_expansions' hoạt động giống như mệnh đề 'LIMIT' của MySQL? Nó chỉ giới hạn số lượng kết quả tiềm năng? –

+4

có, nó hoạt động giống như mệnh đề 'LIMIT', không phải trên truy vấn cuối cùng được chạy, nhưng trên truy vấn tạm thời được sử dụng để tìm danh sách thuật ngữ tìm kiếm trong truy vấn cuối cùng – DrTech

+0

Cảm ơn rất nhiều :) điều này đã giúp rất nhiều :) –