在对象数组中搜索弹性搜索文档中的多个条件

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

我希望你能帮助我找到解决方案,我的问题是: 我的索引中有一个文档列表,例如

{
 "title" : "document 1",
 "status" 2,
 "documentParts" : [{ "partTitle": "part 1",
                      "typePart" : 1,
                      "statusPart" : 2},
                    { "partTitle": "part 2",
                      "typePart" : 2,
                      "statusPart" : 1}]
 

},
{
 "title" : "document 2",
 "status" 2,
 "documentParts" : [{ "partTitle": "part 2",
                      "typePart" : 2,
                      "statusPart" : 2}]
 

},
{
 "title" : "document 3",
 "status" 2,
 "documentParts" : [{ "partTitle": "part 1",
                      "typePart" : 1,
                      "statusPart" : 1},
                    { "partTitle": "part 2",
                      "typePart" : 2,
                      "statusPart" : 2}]
 

},
{
 "title" : "document 4",
 "status" 2,
 "documentParts" : [{ "partTitle": "part 1",
                      "typePart" : 1,
                      "statusPart" : 1},
                    { "partTitle": "part 2",
                      "typePart" : 2,
                      "statusPart" : 1}]
> 

我想要具有“documentParts”且“typePart = 1”和“statusPart = 1”的文档位于“documentParts”数组的同一项目中。
想要的文档是“文档 3”和“文档 4”,但是当我执行以下操作时,我获得了“文档 1”、“文档 3”、“文档 4”,因为查询在数组的任何元素中搜索,而不是在同一个元素中搜索数组项。

我的查询是:

{
  "from": 0,
  "size": 10,  
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "status": {
              "value": 2
            }
          }
        },
        {
          "terms": {
            "documentParts.typePart": [ 1 ],
            "_name": "documentPartFilter"
          }
        },
        {
          "terms": {
            "documentParts.statusPart": [ 1 ],
            "_name": "documentPartStatusFilter"
          }
        }
      ]
    }
  }
}

如何在同一个数组项中进行搜索?

此查询检索数组中至少匹配一个条件的所有对象。预期结果应该是数组中所有满足所有条件的对象。

elasticsearch elastic-stack elasticsearch-dsl
1个回答
0
投票

您需要使用嵌套字段类型

嵌套类型是对象数据类型的特殊版本,它允许对象数组以可以彼此独立查询的方式进行索引。

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