为什么弹性找不到我的搜索文本?

时间:2014-07-14 21:19:46

标签: elasticsearch

我有一个类型的多个实例,每个实例都有字段displayName。这个字段是:

"Contributor1"
"Contributor2"
...
"Contributor49"

我将所有映射/分析器/等设置为默认值。

我试着找到这个:

fuzzy_like_this_field: { "displayName": { like_text: "49" } }

但它没有返回任何匹配。当我尝试关注搜索文本时:

"c49" -> nothing
"co49" -> nothing
"con49" -> nothing
"cont49" -> nothing
"contr49" -> nothing
"contri49" -> nothing
"contrib49" -> CORRECT MATCH

如何改善搜索?奇怪的是弹性找不到" 49" - 它在所有来源中都是独一无二的......

1 个答案:

答案 0 :(得分:1)

字符串字段上的Elasticsearch模糊搜索基于Levenshtein编辑距离:

  

<强>字符串

     

查询字符串字段时,模糊性被解释为Levenshtein   编辑距离 - 需要更改的一个字符的数量   制作成一个字符串,使其与另一个字符串相同。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/common-options.html#fuzziness

可以在此处找到Levenshtein编辑距离的详细说明:http://en.wikipedia.org/wiki/Levenshtein_distance

就您的示例而言,它是将您要搜索的字词更改为您找到的字词所需的字符添加和删除总数。字符串&#34; contrib49&#34;更接近&#34;贡献者49&#34;比&#34; 49&#34;是,它属于此字段和搜索的默认距离或模糊度。

您可以使用默认为.5:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-flt-field-query.html

的模糊参数来增加模糊性

增加它(让我们说.7或.8)会增加它将匹配的整体模糊性。

总的来说,你确定在这里使用正确的方法吗?如果您正在寻找的是通配符搜索,那么模糊搜索可能不是最好的方法 - 您可能需要查看通配符和ngram分析器。