在弹性搜索索引中,我们有一个多个文档,但是一个文档与其他文档不同。它包含没有其他文档的供应商产品映射,因此它是索引中的同类文档之一。如下所示:
{
"_index": "portal_support_20200911",
"_type": "_doc",
"_id": "techno_products",
"_version": 20220829,
"_seq_no": 39,
"_primary_term": 1,
"found": true,
"_source": {
"doc_name": "techno_products",
"updated_on": "20220829",
"products": [
{
"vendor": "Apple",
"product": "Iphone"
},
{
"vendor": "Samsung",
"product": "Galaxy Z"
},
{
"vendor": "Volkswagen",
"product": "Passat"
},
{
"vendor": "Volkswagen",
"product": "Tiguan"
}
]
}
}它在“产品”数组中有数千个供应商产品映射。我们的要求是编写一个弹性搜索查询来获取这个文档的数据,但是我们也希望通过ES查询搜索、排序和分页这个“产品”数组的元素。意味着我们希望通过ES查询搜索、排序和分页该ES文档的_source。
例如,按“供应商”或“产品”按desc顺序排序"products“数组。因为这个数组有数千个条目,所以我们希望一次分页并获得100个元素,然后在下一页,下一个100,等等。我们还希望提供类似于vendor=Volkswagen的搜索选项,因此在弹性搜索查询的输出中只提供匹配的元素。
我是专家的新手,但据我所知,我们可以在ES中按字段搜索、排序和分页文档。
但是,在弹性搜索中,我们也可以在_source中搜索、排序和分页数据吗?如何使用弹性搜索查询实现这一点?
请帮我一把谢谢。
发布于 2022-09-02 16:24:09
我想你是在找内在命中
如果有嵌套查询,可以添加inner_hits作为选项:
{
nested: {
path: "products",
query: {
term: {
"field": "term"
}
},
inner_hits: {
size: 10000,
sort: [
{
"products.product": "desc",
},
]
}
}
}如果您从未使用嵌套查询检索文档,我认为您可以添加嵌套查询并在嵌套查询中使用match_all: {}:
{
nested: {
path: "products",
query: {
match_all: {}
},
inner_hits: {
size: 10000,
sort: [
{
"products.product": "desc",
},
]
}
}
}您可以在from中使用inner_hits对结果进行分页。
我希望这能帮到你。
https://stackoverflow.com/questions/73546230
复制相似问题