如何编写一个包含两个搜索项的查询,这两个搜索项匹配突出显示内部点击的嵌套对象。
下面是示例用例:
我有一个Map:
"mappings": {
"properties": {
"grocery_name": {
"type": "text"
},
"items": {
"type": "nested",
"properties": {
"name": {
"type": "text"
},
"stock": {
"type": "integer"
},
"category": {
"type": "text"
}
}
}
}
}
数据如下所示
{
"grocery_name": "Elastic Eats",
"items": [
{
"name": "Red banana",
"stock": "12",
"category": "fruit"
},
{
"name": "Cavendish banana",
"stock": "10",
"category": "fruit"
},
{
"name": "peach",
"stock": "10",
"category": "fruit"
},
{
"name": "carrot",
"stock": "9",
"category": "vegetable"
},
{
"name": "broccoli",
"stock": "5",
"category": "vegetable"
}
]
}
在这里,如果我想要一个在嵌套文档中同时包含peach和carrot的文档,我可以使用下面的多个嵌套查询进行搜索
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "items",
"query": {
"match_phrase": {
"items.name": {
"query": "carrot"
}
}
}
}
},
{
"nested": {
"path": "items",
"query": {
"match_phrase": {
"items.name": {
"query": "peach"
}
}
}
}
}
]
}
}
}
上面的查询工作得很好,但是如果我添加了内部命中,我不能为两个嵌套查询都添加,如果添加了,我会得到以下错误
[内部点击数]已包含键[项目]的条目
我想突出显示每个匹配的嵌套对象,因为elasticsearch不支持源突出显示有没有任何方法可以突出显示每个嵌套对象?
1条答案
按热度按时间vybvopom1#
你当然可以有多个
inner_hits
但它们需要适当命名:如果没有提供名称,系统将默认为嵌套路径
items
在两个子查询中。