存在不在Elastic Search中处理两级嵌套结构

时间:2017-02-22 20:43:59

标签: elasticsearch

我的映射如下

{
"dsi2": {
    "mappings": {
        "dsi2": {
            "_all": {
                "enabled": true
            }, 
            "properties": {

                "instance": {
                    "properties": {
                        "assignee": {
                            "type": "string"
                        }, 
                        "createdTs": {
                            "type": "long"
                        }, 
                        "dataSourceId": {
                            "type": "integer"
                        }, 
                        "dsTypeId": {
                            "type": "integer"
                        }, 
                        "entitlements": {
                            "properties": {
                                "create": {
                                    "type": "boolean"
                                }, 
                                "delete": {
                                    "type": "boolean"
                                }, 
                                "edit": {
                                    "type": "boolean"
                                }, 
                                "read": {
                                    "type": "boolean"
                                }, 
                                "roleId": {
                                    "type": "integer"
                                }
                            }, 
                            "type": "nested"
                        }, 
                        "formDefinitionId": {
                            "type": "long"
                        }, 
                        "formTypeId": {
                            "type": "long"
                        }, 
                        "id": {
                            "fields": {
                                "raw": {
                                    "type": "integer"
                                }
                            }, 
                            "type": "integer"
                        }, 
                        "instFields": {
                            "properties": {
                                "fieldBoolean": {
                                    "type": "boolean"
                                }, 
                                "fieldDate": {
                                    "format": "strict_date_optional_time||epoch_millis", 
                                    "type": "date"
                                }, 
                                "fieldDouble": {
                                    "fields": {
                                        "raw": {
                                            "type": "double"
                                        }
                                    }, 
                                    "type": "double"
                                }, 
                                "fieldLong": {
                                    "fields": {
                                        "raw": {
                                            "type": "long"
                                        }
                                    }, 
                                    "type": "long"
                                }, 
                                "fieldString": {
                                    "fields": {
                                        "raw": {
                                            "index": "not_analyzed", 
                                            "type": "string"
                                        }
                                    }, 
                                    "type": "string"
                                }, 
                                "fieldValue": {
                                    "fields": {
                                        "raw": {
                                            "index": "not_analyzed", 
                                            "type": "string"
                                        }
                                    }, 
                                    "type": "string"
                                }, 
                                "isKey": {
                                    "type": "boolean"
                                }, 
                                "referredInstKeyData": {
                                    "properties": {
                                        "fieldValue": {
                                            "fields": {
                                                "raw": {
                                                    "index": "not_analyzed", 
                                                    "type": "string"
                                                }
                                            }, 
                                            "type": "string"
                                        }, 
                                        "sortOrder": {
                                            "type": "integer"
                                        }, 
                                        "sourceFieldId": {
                                            "type": "integer"
                                        }
                                    }, 
                                    "type": "nested"
                                }, 
                                "sortOrder": {
                                    "type": "long"
                                }, 
                                "sourceFieldId": {
                                    "type": "integer"
                                }
                            }, 
                            "type": "nested"
                        }, 
                        "instanceId": {
                            "type": "integer"
                        }, 
                        "modifiedTs": {
                            "type": "long"
                        }, 
                        "parentEntityId": {
                            "type": "integer"
                        }, 
                        "processId": {
                            "type": "string"
                        }, 
                        "processName": {
                            "type": "string"
                        }, 
                        "relatedInstances": {
                            "properties": {
                                "createdTs": {
                                    "type": "long"
                                }, 
                                "dataSourceId": {
                                    "type": "integer"
                                }, 
                                "dsTypeId": {
                                    "type": "integer"
                                }, 
                                "entitlements": {
                                    "properties": {
                                        "create": {
                                            "type": "boolean"
                                        }, 
                                        "delete": {
                                            "type": "boolean"
                                        }, 
                                        "edit": {
                                            "type": "boolean"
                                        }, 
                                        "read": {
                                            "type": "boolean"
                                        }, 
                                        "roleId": {
                                            "type": "long"
                                        }
                                    }
                                }, 
                                "formDefinitionId": {
                                    "type": "long"
                                }, 
                                "formTypeId": {
                                    "type": "long"
                                }, 
                                "id": {
                                    "type": "integer"
                                }, 
                                "instFields": {
                                    "properties": {
                                        "fieldBoolean": {
                                            "type": "boolean"
                                        }, 
                                        "fieldDate": {
                                            "format": "strict_date_optional_time||epoch_millis", 
                                            "type": "date"
                                        }, 
                                        "fieldDouble": {
                                            "fields": {
                                                "raw": {
                                                    "type": "double"
                                                }
                                            }, 
                                            "type": "double"
                                        }, 
                                        "fieldLong": {
                                            "fields": {
                                                "raw": {
                                                    "type": "long"
                                                }
                                            }, 
                                            "type": "long"
                                        }, 
                                        "fieldString": {
                                            "fields": {
                                                "raw": {
                                                    "index": "not_analyzed", 
                                                    "type": "string"
                                                }
                                            }, 
                                            "type": "string"
                                        }, 
                                        "fieldValue": {
                                            "fields": {
                                                "raw": {
                                                    "index": "not_analyzed", 
                                                    "type": "string"
                                                }
                                            }, 
                                            "type": "string"
                                        }, 
                                        "isKey": {
                                            "type": "boolean"
                                        }, 
                                        "referredInstKeyData": {
                                            "properties": {
                                                "fieldString": {
                                                    "fields": {
                                                        "raw": {
                                                            "index": "not_analyzed", 
                                                            "type": "string"
                                                        }
                                                    }, 
                                                    "type": "string"
                                                }, 
                                                "fieldValue": {
                                                    "fields": {
                                                        "raw": {
                                                            "index": "not_analyzed", 
                                                            "type": "string"
                                                        }
                                                    }, 
                                                    "type": "string"
                                                }, 
                                                "sortOrder": {
                                                    "type": "integer"
                                                }, 
                                                "sourceFieldId": {
                                                    "type": "integer"
                                                }
                                            }, 
                                            "type": "nested"
                                        }, 
                                        "sortOrder": {
                                            "type": "long"
                                        }, 
                                        "sourceFieldId": {
                                            "type": "integer"
                                        }
                                    }, 
                                    "type": "nested"
                                }, 
                                "instanceId": {
                                    "type": "integer"
                                }, 
                                "modifiedTs": {
                                    "type": "long"
                                }, 
                                "parentEntityId": {
                                    "type": "integer"
                                }, 
                                "status": {
                                    "type": "long"
                                }, 
                                "tenantId": {
                                    "type": "long"
                                }
                            }, 
                            "type": "nested"
                        }, 
                        "status": {
                            "type": "long"
                        }, 
                        "taskAssignees": {
                            "properties": {
                                "role": {
                                    "type": "integer"
                                }, 
                                "user": {
                                    "type": "integer"
                                }
                            }, 
                            "type": "nested"
                        }, 
                        "taskCompleted": {
                            "format": "strict_date_optional_time||epoch_millis", 
                            "type": "date"
                        }, 
                        "taskCompletedBy": {
                            "type": "string"
                        }, 
                        "taskCreated": {
                            "format": "strict_date_optional_time||epoch_millis", 
                            "type": "date"
                        }, 
                        "taskName": {
                            "type": "string"
                        }, 
                        "tenantId": {
                            "type": "long"
                        }
                    }
                }, 
                "status": {
                    "type": "integer"
                }, 
                "tenantId": {
                    "type": "integer"
                }
            }
        }
    }
}
}

使用以下查询时

{
"query": {
      "nested": {
        "path": "instance.instFields",
        "query": {
          "bool": {
            "must": [
                {    
                   "term": {
                        "instance.instFields.fieldValue": "120656"
                    }
                },
                {
                    "exists": {
                        "field": "instance.instFields.referredInstKeyData"
                    }
                }
            ]
          }
        }
      }
    }
}

索引中的一个示例文档如下

 {
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 10.130359,
    "hits": [
      {
        "_shard": 0,
        "_node": "_FohF7-YRyCSh82NmYVslQ",
        "_index": "dsi2",
        "_type": "dsi2",
        "_id": "120655",
        "_score": 10.130359,
        "_source": {
          "instance": {
            "entitlements": [
          {
            "read": true,
            "edit": false,
            "roleId": 169,
            "create": false,
            "delete": false
          }

        ],
        "formTypeId": 3,
        "parentEntityId": 23589,
        "createdTs": 1487701846526,
        "dataSourceId": 22,
        "dsTypeId": 5,
        "modifiedTs": 1487783663308,
        "instanceId": 17790,
        "instFields": [
          {
            "fieldDouble": 120658,
            "sourceFieldId": 1594,
            "sortOrder": 0,
            "referredInstKeyData": [
              {
                "sourceFieldId": 1233,
                "sortOrder": 0,
                "fieldValue": "Depot Transport"
              },
              {
                "sourceFieldId": 1232,
                "sortOrder": 1,
                "fieldValue": "LONDON"
              },

              {
                "sourceFieldId": 1236,
                "sortOrder": 4,
                "fieldValue": "513069"
              },
              {
                "sourceFieldId": 1658,
                "sortOrder": 5,
                "fieldValue": "7378"
              }
            ],
            "isKey": false,
            "fieldValue": "120658",
            "fieldString": "120658"
          },
          {
            "fieldDouble": 120656,
            "sourceFieldId": 1593,
            "sortOrder": 0,
            "referredInstKeyData": [
              {
                "sourceFieldId": 1233,
                "sortOrder": 0,
                "fieldValue": "Joe Cadillac Ii Ltd"
              },


              {
                "sourceFieldId": 1236,
                "sortOrder": 4,
                "fieldValue": "518508"
              },
              {
                "sourceFieldId": 1658,
                "sortOrder": 5,
                "fieldValue": "7376"
              }
            ],
            "isKey": false,
            "fieldValue": "120656",
            "fieldString": "120656"
          },
          {
                "sourceFieldId": 2580,
                "sortOrder": 0,
                "isKey": false,
                "fieldValue": "52fe850d-fc17-4dd9-a3a2-257485a9eb27",
                "fieldString": "52fe850d-fc17-4dd9-a3a2-257485a9eb27"
              }
            ],
            "processName": "Vehicle Delivery",
            "tenantId": 3,
            "formDefinitionId": 729,
            "id": 120655,
            "assignee": "none",
            "status": 4
          },
          "formTypeId": 3,
          "tenantId": 3,
          "status": 4
        }
      }
    ]
  }
}

它没有返回fieldValue": "120656"referredInstKeyData元素所在的文档。任何可能导致exists不起作用的想法?弹性搜索版本是2.3.1

1 个答案:

答案 0 :(得分:0)

这是弹性搜索中的已知问题。 嵌套属性不支持 exists 。在这里确认。 https://github.com/elastic/elasticsearch/issues/23325