我有一份格式如下的文件:
{
"email": "john.doe@gmail.com",
"first_name": "John",
"last_name": "Doe",
"items": [
{
"id": 140,
"description": ...,
},
{
"id": 156",
"description": ...,
},
]
}
我试图使用滚动分页来获取"items“字段的分页列表,并尝试使用类似于以下查询的内容:
http://localhost:9200/my_index/users/_search?scroll=1m
{
"size": 10,
"query": {
"ids": {
"type": "users",
"values": [
"00000001"
]
}
},
"_source": "items"
}
但是它是对用户进行分页,而不是对项进行分页,我不知道是否有一种方法可以对给定字段的元素进行分页,而不是文档本身的元素。
我正在使用Elasticsearch 2.3.5
发布于 2021-06-15 10:08:41
在Elasticsearch中,您需要使用嵌套对象而不是对象数组。
对象数组不像预期的那样工作:不能独立于数组中的其他对象查询每个对象。如果您需要能够这样做,那么您应该使用嵌套数据类型而不是对象数据类型。
有关更多信息,请查看有关数组、这里和嵌套对象这里的弹性搜索官方文档。
在将映射更改为嵌套对象之后,您将能够进行如下查询:
查询
GET my-index-000001/_search
{
"query": {
"nested": {
"path": "items",
"query": {
"bool": {
"must": [
{ "match": { "items.id": "ids" }}
]
}
}
}
}
}
另外,Es2.x非常老,在Elasticsearch中不再支持不同的类型,您可能也想更新您的Elasticsearch。
https://stackoverflow.com/questions/67971158
复制相似问题