【问题标题】:Filter in elasticsearch 2.2elasticsearch 2.2 中的过滤器
【发布时间】:2016-07-06 12:00:31
【问题描述】:

如何在执行查询之前在 elasticsearch 2.2 中过滤文档。我参考了这个页面,但仍然无法构建正确的查询。

https://www.elastic.co/guide/en/elasticsearch/reference/2.2/query-filter-context.html

{
"size" : 9999,
"query" : {
"bool" : {     
    "filter" : {
    "bool" : {
      "must" : [ {
        "exists" : {
          "field" : "dvd"
        }
      } ]
    }
  },
  "should" : [{

    "bool" : {
      "must" : [ {
        "match" : {
          "rec" : {
            "query" : "CKS",
            "type" : "boolean"
          }
        }
      }, {
        "match" : {
          "date" : {
            "query" : "2016-03-09",
            "type" : "boolean"
          }
        }
      } ]
    }

  }]
}
  }
}

这就是我正在尝试做的事情。我有很多应该从句,每个子句都有 2 个必须从句。任何一个 should 子句都应该匹配以检索文档。为了简单起见,我只包含了一个 should 子句。查询工作完美。我想对此应用过滤器。在查询之前过滤文档。但这不起作用。

我正在使用 Elasticsearch 2.2 ...请告诉我如何在此版本的 elasticsearch 中过滤文档。

我认为后置过滤器有不同的用途。

【问题讨论】:

    标签: elasticsearch lucene spring-data-elasticsearch nosql


    【解决方案1】:

    建议对 bool 查询的过滤器部分进行更改。您可以将查询数组传递给过滤器项。它会变成: { "filter" : [ { "exists": { "field" : "dvd" } } ] }

    【讨论】:

    • 如果我想在 OR 条件下应用两个存在过滤器怎么办。即)如果存在过滤器中的任何一个字段存在,则过滤文档。没有必要同时拥有这两个字段。
    【解决方案2】:

    关于您在 Jettro 问题下的评论:

    您可以在 bool 查询的过滤器块内使用 bool 查询/过滤器,如下所示:

    {
      "query": {
        "bool": {
          "filter": {
            "bool": {
              "should": [
                {
                  "exists": {
                    "field": "dvd"
                  }
                },
                {
                  "exists": {
                    "field": "album"
                  }
                }
              ]
            }
          }
        }
      }
    }
    

    现在将返回带有 DVD 字段或专辑字段的文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 2014-12-31
      • 2017-07-27
      • 2015-09-17
      相关资源
      最近更新 更多