在ElasticSearch中排除搜索中的短语

问题描述 投票:1回答:1

我正在使用ElasticSearch(elasticsearch-dsl)并搜索关键字,但是想忽略搜索中的一些短语。例如。搜索"best"并忽略短语"best regards":它应该找到文件“The Best Car bla-bla-bla Best Regards”(第一场比赛是正确的,第二场比赛被忽略),但不应该与“Bla-bla-bla最好的问候”相匹配。理想情况下,它还应该仅突出显示忽略短语中没有单词的实际匹配。我正在考虑踢2个查询,然后从实际搜索中删除忽略短语的结果。是否有可能获得匹配的令牌列表与他们的位置?或者有更好的方法吗?我无法添加停止短语到索引,因为搜索是动态的,忽略短语因用户而异。

elasticsearch elasticsearch-dsl elasticsearch-dsl-py
1个回答
0
投票

我不确定我是否完全理解你的方法,但听起来你想要添加到你的查询中一定不能查询并结合精确的短语匹配。它会看起来像这样:

{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "text_field" : "best" }
      },
      "must_not" : {
        query_string: {default_field: "text_field", query: '\"best regards\"'}
      },
   }
}

如果你有多个短语要排除字符串语法是:

'\"text"\ OR \"text1"\ OR ... \"textn\"'

我也花了一些时间才意识到弹性搜索custom analyzers有多强大,我不确定你的数据究竟是什么样的,你的需求是什么,但如果你还没有,你应该看看它,它可能会为你节省很多麻烦,让您的查询更有效率。

© www.soinside.com 2019 - 2024. All rights reserved.