2017-05-04 88 views
2

我很難找出如何使用帶有過濾器的elsticsearch dis_max查詢。Elasticsearch:如何使用帶有過濾器的dismax查詢

當我這樣做:

{ 
    "query": { 
     "dis_max": { 
      "queries": [{ 
       "multi_match": {} 
      }, 
      { 
       "multi_match": {} 
      }], 
      "filter": { 
       //Term filter 
      }   
     } 
    } 
} 

它說[dis_max]查詢不支持[過濾器]。但我可以使用dis_max查詢和過濾的別名。例如:我使用下面定義的過濾器創建了一個別名,並在執行dis_max查詢時使用它,並且它完美地工作。

{ 
    "add" : { 
     "index" : "test1", 
     "alias" : "alias1", 
     "filter" : { //Term filter } 
    } 
} 

因此,應該有一些方法可以實現這一點,而無需創建別名。任何人都可以請告訴我該怎麼做。

+0

' 「multi_match」:{},' - >' 「multi_match」:{}' – RoiHatam

回答

2

如果有人正在尋找答案,我最終在必須類中使用了帶有dis_max查詢的bool查詢,並簡單地將其作爲bool查詢的過濾器部分進行過濾。

例:

{ 
    "query": { 
     "bool": { 
      "must": { 
       "dis_max": { 
        "queries": [{ 
         "multi_match": {} 
        }, 
        { 
         "multi_match": {} 
        }] 
       } 
      } 
      "filter": { 
       //Term filter 
      }   
     } 
    } 
}