3

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

4

1 回答 1

1

我不确定我是否完全理解您的方法,但是听起来您想在查询中添加一个不能与完全匹配的短语相结合的查询。它看起来有点像这样:

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

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

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

我也花了一些时间才意识到弹性搜索自定义分析器有多么强大,我不确定你的数据到底是什么样子以及你的需求是什么,但如果你还没有,你应该看看它,它可能会为你节省很多麻烦并使您的查询更有效率。

于 2019-04-22T18:51:04.583 回答