我需要从包含嵌套数据的elasticsearch查询中获取数据。
数据源设置为true。添加“字段”
"fields":["*"],
"query": {
...
返回根级别的所有数据。
但是我需要获取嵌套文档(实际上是嵌套文档)中的数据。
与_source和具有嵌套对象ref的字段一起玩
"fields":["products.envs.title"],
但到目前为止没有喜悦。
任何人都对如何获取此数据作为查询的任何想法。
查询包括聚合,返回的很好,但还需要将嵌套数据作为结果的一部分,以便我可以检查标志并根据标志返回数据以进行调用。
最佳答案
您尚未指定映射和对象结构,因此我创建了自己的映射,如下所示:
POST /so/so/1
{
"id": 1,
"user": {
"name": "adam",
"role": {
"code": "admin"
}
}
}
现在,让我们尝试使用
fields
参数查询数据并削减返回结果。查询:
POST /so/so/_search
{
"fields": [
"id",
"user.role.code"
],
"query": {
"match_all": {}
}
}
结果:
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "so",
"_type": "so",
"_id": "1",
"_score": 1,
"fields": {
"user.role.code": [
"admin"
],
"id": [
1
]
}
}
]
}
如您所见,一切工作正常。问题将是,如果您想告诉您要返回整个对象,例如“user”或“user.role”,则将收到“字段[X]不是叶字段”异常。唯一的解决方案是停止使用
fields
参数,并开始使用_source
参数剪切数据-此处描述了此问题:https://github.com/elastic/elasticsearch/issues/4888。另外,不建议使用fields
参数,您应始终使用_source
参数,如下所示。查询:
POST /so/so/_search
{
"_source": [
"id",
"user.role.code"
],
"query": {
"match_all": {}
}
}
响应:
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "so",
"_type": "so",
"_id": "1",
"_score": 1,
"_source": {
"id": 1,
"user": {
"role": {
"code": "admin"
}
}
}
}
]
}
关于elasticsearch - 如何创建在结果中包含嵌套数据的Elasticsearch查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37675720/