满足数组中所有条件的查询

时间:2020-10-13 06:32:11

标签: elasticsearch

文档以下面的形式存储在Elastic Research索引中。

映射

{
  "mappings": {
    "properties": {
      "data": {
        "type": "nested" 
      }
    }
  }
}

第一篇文档

{
    "data": [
        {
            "value": "a"
        },
        {
            "value": "a"
        },
        {
            "value": "b"
        }
    ]
}

第二个文档

{
    "data": [
        {
            "value": "a"
        },
        {
            "value": "a"
        },
        {
            "value": "a"
        }
    ]
}

仅当数组中的所有值均为'a'(第二个文档)时,我才想返回文档

在这种情况下,我应该如何确定查询条件?

1 个答案:

答案 0 :(得分:1)

nested query像搜索嵌套字段对象一样对其进行索引 作为单独的文件。如果对象与搜索匹配,则嵌套 查询返回根父文档。

将布尔查询与mustmust_not结合使用时,它将搜索每个单独的嵌套对象,并消除不匹配的对象,但是如果还有一些嵌套对象,只要与您的查询相匹配,您就会得到结果。

在下面的搜索查询中进行尝试,所有具有嵌套b值的嵌套对象的文档都将被丢弃。

搜索查询:

{
  "query": {
    "bool": {
      "must_not": {
        "nested": {
          "path": "data",
          "query": {
            "term": {
              "data.value": "b"
            }
          }
        }
      }
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "stof_64329782",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.0,
        "_source": {
          "data": [
            {
              "value": "a"
            },
            {
              "value": "a"
            },
            {
              "value": "a"
            }
          ]
        }
      }
    ]

结合了多个布尔查询和嵌套查询的搜索查询:

下面的搜索查询还会为您提供所需的结果。

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "data",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "data.value": "a"
                    }
                  }
                ]
              }
            }
          }
        }
      ],
      "must_not": [
        {
          "nested": {
            "path": "data",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "data.value": "b"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}
相关问题