Cod*_*ard 2 lucene elasticsearch elasticsearch-dsl nested-object
如何编写包含两个搜索词的查询,这些搜索词与突出显示内部匹配的嵌套对象相匹配。
\n以下是示例用例:
\n我有一个映射:
\n"mappings": {\n "properties": {\n "grocery_name": {\n "type": "text"\n },\n "items": {\n "type": "nested",\n "properties": {\n "name": {\n "type": "text"\n },\n "stock": {\n "type": "integer"\n },\n "category": {\n "type": "text"\n }\n }\n }\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n数据如下所示
\n{\n "grocery_name": "Elastic Eats",\n "items": [\n {\n "name": "Red banana",\n "stock": "12",\n "category": "fruit"\n },\n {\n "name": "Cavendish banana",\n "stock": "10",\n "category": "fruit"\n },\n {\n "name": "peach",\n "stock": "10",\n "category": "fruit"\n },\n {\n "name": "carrot",\n "stock": "9",\n "category": "vegetable"\n },\n {\n "name": "broccoli",\n "stock": "5",\n "category": "vegetable"\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n在这里,如果我想要一个在嵌套文档中都有桃子和胡萝卜的文档\ni可以使用多个嵌套查询进行搜索,如下所示
\n{\n "query": {\n "bool": {\n "must": [\n {\n "nested": {\n "path": "items",\n "query": {\n "match_phrase": {\n "items.name": {\n "query": "carrot"\n }\n }\n }\n }\n },\n {\n "nested": {\n "path": "items",\n "query": {\n "match_phrase": {\n "items.name": {\n "query": "peach"\n }\n }\n }\n }\n }\n ]\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n上面的查询工作完美,但是如果我添加内部命中,我无法为两个嵌套查询添加,如果我这样做,我会收到以下错误
\n\n\n\xe2\x80\xa8\xe2\x80\xa8[inner_hits] 已包含 key[items] 的条目
\n
我想要突出显示每个匹配的嵌套对象,因为elasticsearch 不支持_source突出显示 有什么方法可以突出显示每个嵌套对象?
\n您当然可以有多个inner_hits,但需要适当命名它们:
{
"query": {
"bool": {
"must": [
{
"nested": {
"inner_hits": {
"name": "carrot" <--
},
"path": "items",
"query": {
"match_phrase": {
"items.name": {
"query": "carrot"
}
}
}
}
},
{
"nested": {
"inner_hits": {
"name": "peach" <--
},
"path": "items",
"query": {
"match_phrase": {
"items.name": {
"query": "peach"
}
}
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果未提供名称,您将收到错误 b/c,系统将默认使用items两个子查询中的嵌套路径。
| 归档时间: |
|
| 查看次数: |
2907 次 |
| 最近记录: |