要按插入顺序查询Elasticsearch嵌套字段,可以使用Nested数据类型和Inner Hits功能。以下是一个示例解决方法,包括代码示例:
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"nested_field": {
"type": "nested"
}
}
}
}
}
PUT my_index/_doc/1
{
"nested_field": [
{
"name": "John",
"age": 30
},
{
"name": "Alice",
"age": 25
},
{
"name": "Bob",
"age": 35
}
]
}
GET my_index/_search
{
"query": {
"nested": {
"path": "nested_field",
"query": {
"match_all": {}
},
"inner_hits": {} // 返回内部命中结果
}
}
}
上述查询返回的结果中,inner_hits部分包含了按插入顺序返回的嵌套字段。可以通过以下方式获取返回的嵌套字段:
from elasticsearch import Elasticsearch
es = Elasticsearch()
res = es.search(index="my_index", body={
"query": {
"nested": {
"path": "nested_field",
"query": {
"match_all": {}
},
"inner_hits": {}
}
}
})
for hit in res['hits']['hits']:
nested_hits = hit['inner_hits']['nested_field']['hits']['hits']
for nested_hit in nested_hits:
source = nested_hit['_source']
print(source)
这样,你将获得按插入顺序查询的嵌套字段的结果。