elasticsearch - Elasticsearch中的软must_not

标签 elasticsearch lucene full-text-search elasticsearch-dsl

我试图在elasticsearch中的文档列表中搜索一个单词,同时排除包含该单词的表达式。

例如,我想在下面的列表中搜索单词“good”,但以一种柔和的方式排除表达式“非常好”:

  • 这是一个很好的文档。
  • 这是一个很好的文档。
  • 这是一个很好的文档。确实不错。

  • 这样它将返回1和3,因为它具有“良好”实例,该实例未包含在表达式“非常良好”中。
    我尝试使用BooleanQuery或SpanNotQuery,但每次都排除文档n°3。

    另一种方法是使用分析器,该分析器将删除我不想对其进行搜索的表达式。但是,这使我的排除非常静态,无法在查询时设置。

    您知道这是否可行以及如何实现?

    最佳答案

    我最糟糕的是,SpanNotQuery实际上可以解决问题,首先我必须已经对它进行了错误测试。

    此查询给出预期的结果:

    {
      "query": {
        "span_not": {
          "include": {
            "span_term": { "field": "good" }
          },
          "exclude": {
            "span_near": {
              "clauses": [
                { "span_term": {"field": "quite" }},
                { "span_term": {"field": "good" }}
              ],
              "slop": 0,
              "in_order": true
            }
          }
        }
      }
    }
    

    关于elasticsearch - Elasticsearch中的软must_not,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54928989/

    相关文章:

    安全性(又名权限)和 Lucene - 如何?应该这样做吗?

    c# - 在 C#/Entity Framework 中编写全文搜索算法 - 从哪里开始?

    elasticsearch - ElasticSearch多字同义词

    ElasticSearch - 获取字段值为 x 且该类型的最大日期低于 y 日期的文档

    java - 将 geo_shape 数据添加到elasticsearch

    java - 在java jTable中显示lucene搜索结果

    php - Zend Lucene 查询

    elasticsearch - Elasticsearch 查询过滤器和聚合不起作用

    mysql - 使用 SELF JOIN 搜索

    Solr 模糊搜索 'hotdog' 和 'hot dog'