2014-02-13 94 views
1

我目前正在開始使用Elasticsearch,並且正在嘗試構建一個搜索查詢,以便在不同字段中查找關鍵字,具體取決於文檔類型。按文檔類型查詢特定字段

實施例:

索引名稱:index1之間

文獻類型:

  • DOC1(_id,名稱,大小,顏色,重量)
  • DOC2(_id,姓名,持續時間,長度,寬度,高度)

現在我想查詢index1的類型doc1doc2文件,但在doc1我只希望在列namesizeweight進行搜索,而在doc2我想在列namelengthheight進行搜索。

如何在單個查詢中實現此目的?

回答

2

您可以通過類型和名稱引用字段並使用bool查詢。一個基本的例子如下。

{ 
    "query": { 
     "bool": { 
      "should": [ 
       { 
        "bool": { 
         "must": [ 
          { 
           "term": { 
           "doc1.name": { 
            "value": "2" 
           } 
           } 
          }, 
          { 
           "term": { 
           "doc1.size": { 
            "value": "23" 
           } 
           } 
          }, 
          { 
           "term": { 
           "doc1.weight": { 
            "value": "52" 
           } 
           } 
          } 
         ] 
        } 
       }, 
       { 
        "bool": { 
         "must": [ 
          { 
           "term": { 
           "doc2.name": { 
            "value": "2" 
           } 
           } 
          }, 
          { 
           "term": { 
           "doc2.length": { 
            "value": "23" 
           } 
           } 
          }, 
          { 
           "term": { 
           "doc2.height": { 
            "value": "52" 
           } 
           } 
          } 
         ] 
        } 
       } 
      ] 
     } 
    } 
}