ElasticSearch通过嵌套的布尔类型字段进行过滤。

问题描述 投票:0回答:1

我需要在布尔类型的多个嵌套字段上查询.结构的映射。

    "mappings" : {
      "properties" : {
        "leaders" : {
          "type" : "nested",
          "properties" : {
            "except_1" : {
              "type" : "boolean"
            },
            "except_2" : {
              "type" : "boolean"
            },
            "counter" : {
              "type" : "integer"
            }
          }
        }
      }
    }

我试图同时使用查询 except1except2 只待 False.下面是我的尝试,可惜它的回报是 TrueFalse 两个字段,但我无法解决这个问题。

    "query": {
        "nested": {
            "path": "leaders",
            "query": {
                "bool": {
                    "must": [
                        {
                            "term": {
                                "leaders.except_1": False
                            }
                        },
                        {
                            "term": {
                                "leaders.except_2": False
                            }
                        }
                    ]
                }
            }
        }
    }
elasticsearch nested term booleanquery
1个回答
2
投票

你可能正在寻找的是 inner_hits 选项 -- 只显示匹配的嵌套子文件。

PUT leaders
{"mappings":{"properties":{"leaders":{"type":"nested","properties":{"except_1":{"type":"boolean"},"except_2":{"type":"boolean"},"counter":{"type":"integer"}}}}}}

POST leaders/_doc
{
  "leaders": [
    {
      "except_1": true,
      "except_2": false
    },
    {
      "except_1": false,
      "except_2": false
    }
  ]
}

GET leaders/_search
{
  "query": {
    "nested": {
      "path": "leaders",
      "inner_hits": {}, 
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "leaders.except_1": false
              }
            },
            {
              "term": {
                "leaders.except_2": false
              }
            }
          ]
        }
      }
    }
  }
}

然后

GET leaders/_search
{
  "query": {
    "nested": {
      "path": "leaders",
      "inner_hits": {}, 
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "leaders.except_1": false
              }
            },
            {
              "term": {
                "leaders.except_2": false
              }
            }
          ]
        }
      }
    }
  }
}

{
  "hits":[
    {
      "_index":"leaders",
      "_type":"_doc",
      "_id":"u-he8HEBG_KW3EFn-gMz",
      "_score":0.87546873,
      "_source":{                           <-- default behavior
        "leaders":[
          {
            "except_1":true,
            "except_2":false
          },
          {
            "except_1":false,
            "except_2":false
          }
        ]
      },
      "inner_hits":{
        "leaders":{
          "hits":{
            "total":{
              "value":1,
              "relation":"eq"
            },
            "max_score":0.87546873,
            "hits":[                              <------- only the matching nested subdocument
              {
                "_index":"leaders",
                "_type":"_doc",
                "_id":"u-he8HEBG_KW3EFn-gMz",
                "_nested":{
                  "field":"leaders",
                  "offset":1
                },
                "_score":0.87546873,
                "_source":{
                  "except_1":false,
                  "except_2":false
                }
              }
            ]
          }
        }
      }
    }
  ]
}

此外,你还可以强制系统只返还你的 inner_hits"_source": "inner_hits" 在您的搜索查询的顶层。

© www.soinside.com 2019 - 2024. All rights reserved.