【问题标题】:Exclude phrase from search in ElasticSearch从 ElasticSearch 中的搜索中排除短语
【发布时间】:2019-09-11 20:54:18
【问题描述】:

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

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl elasticsearch-dsl-py


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      相关资源
      最近更新 更多