2014-02-19 32 views
4

爲了在ElasticSearch中使用percolator,我需要爲搜索查詢編制索引。但是,我們主要使用過濾器進行搜索。爲了索引這些過濾器,它們必須是wrapped inside a query如何在查詢中包裝ElasticSearch過濾器

我知道兩種不同的方法來實現這一點。包裹過濾器在filtered query

{ 
    "query": { 
    "filtered": { 
     "filter": { ... } 
    } 
    } 
} 

,或者使用constant_score query

{ 
    "query": { 
    "constant_score": { 
     "filter": { ... } 
    } 
    } 
} 

哪種方法是優選的?爲什麼?

回答

2

雖然兩者都會產生相同的結果,並且應該有非常接近的性能,但我更願意使用filtered-查詢。它很清楚地傳達了這個意圖。幾個月後你可能會開始使用同樣的查詢,並想知道爲什麼你關心分數。 :)

+0

我同意'過濾的' - 查詢更好地說明目的。關於表現,你認爲你們兩人的表現應該有什麼相似? – Jippe

+1

帶有'match_all'查詢(或無查詢)的Elasticsearch'過濾'查詢實際上是使用'XConstantScoreQuery'評估的。 –

0

根據此link,「帶有match_all查詢的已過濾查詢會自動在內部轉換爲constant_score 1」。所以聽起來最好的選擇是使用constant_score並省略一個內部步驟。

相關問題