簡體   English   中英

如何在一個文檔中匹配多個嵌套的 object 與 elasticsearch 中的內部命中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM