0

我正在尝试使用指定的多个字段执行弹性搜索查询。这是一些伪代码,希望能说明我的意图:

"query" : {
  "query_string" : { "query" : "william" }
},
"filter" : {
  "missing" : { "field" : "membership_expires_on" }
},
"filter" : {
  "missing" : { "field" : "gender" }
},
"filter" : {
  "terms" : { "status" : "p"}
},
"filter" : {
  "terms" : { "unit_id" : "4"}
}

我正在尝试将所有这些过滤器组合在一起,但从弹性搜索文档中我无法弄清楚如何将这些特定过滤器放入单个查询中。任何帮助将不胜感激!

更新:这是我到目前为止所拥有的:

{
  "from": 0,
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "missing": {
                "field": "membership_expires_on"
              }
            },
            {
              "term": {
                "status": "p"
              }
            },
            {
              "missing": {
                "field": "gender"
              }
            },
            {
              "term": {
                "unit": "4"
              }
            }
          ]
        }
      },
      "query": {
        "query_string": {
          "query": "william"
        }
      }
    }
  },
  "size": 10
}

但这没有返回任何结果,所以我做错了什么。我是否以非法方式使用带有数组的布尔过滤器?

更新 2:我已经确认上面的 JSON 确实是一个有效的查询,所以我的数据/索引可能有问题。这将是另一天的问题:-)

4

1 回答 1

2

看看BoolFilter。它应该有帮助。

于 2012-11-06T10:25:00.290 回答