18

我在我的项目中使用模糊匹配主要是为了查找拼写错误和同名的不同拼写。我需要准确理解弹性搜索的模糊匹配是如何工作的,以及它是如何使用标题中提到的 2 个参数的。

据我了解,min_similarity是查询字符串与数据库中的字符串匹配的百分比。我找不到有关如何计算此值的确切描述。

据我所知, max_expansions是应该执行搜索的 Levenshtein 距离。如果这实际上是 Levenshtein 距离,那对我来说将是理想的解决方案。无论如何,它不起作用,例如我有“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

文档说了一些我实际上不明白的内容:

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

所以请任何人向我解释这些参数究竟是如何影响搜索结果的。

4

1 回答 1

25

min_similarity是一个介于零和一之间的值。来自 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

所指的“编辑距离”是Levenshtein distance

此查询在内部工作的方式是:

  • 当考虑min_similarity
  • 然后它会搜索所有这些术语。

你可以想象这个查询有多么沉重!

为了解决这个问题,您可以设置max_expansions参数以指定应考虑的最大匹配项数。

于 2011-08-22T17:39:29.710 回答