elasticsearch 使用多个令牌之间的邻近搜索匹配多个令牌

mnemlml8  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(138)

有一个大型的文本语料库(100 k)和一个ngrams,例如:
query -获取带有标记['united','airlines']的所有文本
我希望只检索具有两个标记(“united”,“airlines”)的完全匹配的文本,但是我还希望任何标记(united -〉airlines,或者“airlines-〉united”)之间的距离将达到K个位置。
我现在疑问是:

query = {
      "size": limit,
      "query": {
          "query_string": {"query": query,
                           "phrase_slop":2,
                           "default_operator":"AND"}
      }
  }

但它似乎不是正确的方法,因为我得到的结果与超过2个位置(令牌)之间。
你知道吗?

yv5phkfx

yv5phkfx1#

我已经找到了我问题的答案:
当在ElasticSearch中使用查询字符串类型查询时,我们可以通过添加~k来使用邻近搜索,其中k是短语中单词的最大编辑距离的数量。
对于主问题中的查询,添加邻近搜索:

query = {
  "size": limit,
  "query": {
      "query_string": {"query":"united airlines"~2,
                       "phrase_slop":2,
                       "default_operator":"AND"}
  }
}

有关详细信息,请参阅文档

相关问题