对存储在字段中的数组进行分页-Elasticsearch



我有一份格式如下的文档:

{
"email": "john.doe@gmail.com",
"first_name": "John",
"last_name": "Doe",
"items": [
{
"id": 140,
"description": ...,
},
{
"id": 156",
"description": ...,
},
]
}

我正试图得到一个"的分页列表;项目";字段使用滚动分页,我尝试了类似于以下查询的东西:

http://localhost:9200/my_index/users/_search?scroll=1m
{   
"size": 10,
"query": {
"ids": {
"type": "users",
"values": [
"00000001"
]
}
},
"_source": "items"
}

但它是对用户进行分页,而不是对项目进行分页,我不知道是否有办法对给定字段的元素进行分页,而是对文档本身的元素进行寻呼。

我使用的是Elasticsearch 2.3.5

您需要在Elasticsearch中使用嵌套对象而不是对象数组。

对象数组无法按预期工作:无法独立于数组中的其他对象查询每个对象。如果您需要能够做到这一点,那么您应该使用嵌套的数据类型,而不是对象数据类型。

有关更多信息,请在此处查看Elasticsearch关于数组的官方文档,在此处查看Nested对象的官方文档。

在将映射更改为嵌套对象后,您将能够进行如下查询:

查询

GET my-index-000001/_search
{
"query": {
"nested": {
"path": "items",
"query": {
"bool": {
"must": [
{ "match": { "items.id": "ids" }}
]
}
}
}
}
}

此外,ES2.x确实很旧,在Elasticsearch中不再支持不同的类型。您可能也想更新您的Elasticsearch。

最新更新