你如何匹配长串?

时间:2016-12-16 06:12:49

标签: elasticsearch

我目前面临的主要挑战之一是如何匹配长串应用模糊性。

例如,我们说我们有以下文件:

PUT my_index/type/2
{
  "name":"longnameyesverylong"
}

如果我对该名称应用模糊搜索,如下所示:

"match": {
            "name": {
              "query": "longnameyesverylong",
              "fuzziness": 2
            }

我可以找到它,但我的目标是能够打开网络,并为这种类型的字符串提供两个以上的错误。

让我们举例来说,我的索引如下:

PUT my_index/type/2
{
  "name":"l1ngnam2yesver3long"
}

上一个匹配查询无法找到此文档,因为模糊度大于2且ES不支持。

我尝试使用ngrams,但令牌也不符合要求,索引也会增长太多。

我唯一能做的就是在索引时手动分割字符串,创建我自己的标记器"并创建一个看起来像

的文档
 PUT my_index/type/2
    {
      "name":"longnamey esverylong"
    }

然后,在搜索时,再次拆分字符串并对每个标记应用具有模糊性的布尔查询。这可能会做我需要的,但我觉得这个问题可能有更好的解决方案。

您认为其他方法是否合适?

谢谢。

1 个答案:

答案 0 :(得分:0)

问题解决了。这个问题的关键是pattern_capture过滤器。