[英]How do I query an Elasticsearch nested document within an inner object?
[英]How to do match multiple nested object in one document with inner hits in elasticsearch
如何編寫一個包含兩個搜索詞的查詢,這些搜索詞匹配嵌套對象並突出顯示內部命中。
以下是示例用例:
我有一個映射:
"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"
}
]
}
在這里,如果我想要一個在嵌套文檔中同時包含桃子和胡蘿卜的文檔,我可以使用多個嵌套查詢進行搜索,如下所示
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "items",
"query": {
"match_phrase": {
"items.name": {
"query": "carrot"
}
}
}
}
},
{
"nested": {
"path": "items",
"query": {
"match_phrase": {
"items.name": {
"query": "peach"
}
}
}
}
}
]
}
}
}
上面的查詢完美地工作,但如果我添加內部點擊,我無法為兩個嵌套查詢添加,如果我這樣做,我會得到以下錯誤
[inner_hits] 已經包含 key[items] 的條目
我想突出顯示每個匹配的嵌套 object,因為 elasticsearch 不支持_source突出顯示有什么方法可以為每個嵌套的 object 突出顯示嗎?
您當然可以有多個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"
}
}
}
}
}
]
}
}
}
如果沒有提供名稱,您將收到錯誤 b/c,系統將默認使用嵌套路徑,該路徑是您的兩個子查詢中的items
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.