正确查询 ES 中的嵌套类属性(但 w/o 嵌套类型)

Correct query for nested like properties in ES (but w/o nested type)

在 ES 1.7 中给出此文档

 {
                  "_index": "prod",
                  "_type": "customerpropertieses",
                  "_id": "215c4bd7-7611-4c6a-8681-ef3b318613a0",
                  "_source": {
                    "properties": [
                      {
                        "extentionPropertyId": 7,
                        "propertyName": "Video Introduction",
                        "value": "bla"
                      },
                      {
                        "extentionPropertyId": 8,
                        "propertyName": "Guide Exp"
                      },
                    ],
                    "id": "215c4bd7-7611-4c6a-8681-ef3b318613a0",
                    "parentId": "2222"
                  } }

我想找到一个查询,说明如果 propertyName 和 value IN THE SAME 大括号匹配某些值,则 return 该 customerpropertieses 文档。

现在我可能对以下查询做错了,因为当任何 propertyName 与查询匹配并且任何值与查询匹配时,它 returns 是一个 customerpropertieses 文档。基本上我想强制 propertyName 和 value 的分组来自相同的 "object index"

ES 查询未正常工作

"query":{
            "type": "customerpropertieses",
                "query": {
                  "bool": {
                    "must": [
                      {
                        "bool": {
                          "must": [
                            {
                              "match": {
                                "propertyName": {
                                  "query": "Guide Exp"
                                }
                              }
                            },
                            {
                              "match": {
                                "value": {
                                  "query": "bla"
                                }
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }       }

我需要嵌套类型吗?

简答:您确实需要使用嵌套文档。 稍微长一点:在内部,ES "flatten" 那些所以它在 Lucene 索引中看起来像这样:

{
   extentionPropertyId: [7, 8],
   propertyName: ["Video Introduction", "Guide Exp"],
   value: ["bla"]
}

如您所见,每个 "object" 之间的 link 丢失了。

这里有更详细的解释 https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html