2014-01-15 57 views
-1

我目前正在制定有針對性的廣告系統。 我跟蹤用戶的偏好,我應該相應地檢索廣告。使用elasticsearch I指數廣告,其中I指數廣告的標籤:根據用戶在彈性搜索中的偏好進行提升

捲曲-XPUT本地主機:9200 /廣告/廣告/ ad789 -d「{ 「標籤」: 「體育」, 「遊戲」] }」

現在,這裏是棘手的部分, 我想根據用戶的喜好 由2提高具有由8和遊戲標籤運動的廣告。

+0

你試過了什麼?我會看看[function_score查詢](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html)。 – javanna

+0

它用於提高查詢檢索到的文檔,我需要的是提高查詢的多個部分與搜索「標籤」相同的屬性 –

+0

當然,但您的文檔可能會匹配不同的查詢或過濾器嗎?您也可以將多個查詢組合在一起,併爲每個查詢分配一個不同的'boost',而不使用function_score。 – javanna

回答

2

您可以使用多個過濾器設置一個function_score查詢,其中每個過濾器在匹配時都會提供不同的提升。例如,如果該查詢具有「運動」標籤,則該文檔分數乘以8,如果它包含「遊戲」標籤,則該分數乘以2。

{ 
    "query": { 
    "function_score": { 
     "query": { 
     "match_all": {} 
     }, 
     "functions": [ 
     { 
      "filter": { 
      "term": { 
       "tags": "sports" 
      } 
      }, 
      "boost_factor": 8 
     }, 
     { 
      "filter": { 
      "term": { 
       "tags": "games" 
      } 
      }, 
      "boost_factor": 2 
     } 
     ] 
    } 
    } 
} 

默認情況下,提升值將與查詢得分相乘。或者,您可以使用參數boost_mode僅使用函數分數(替換),將函數分數添加到查詢分數(總和),平均函數分數和查詢分數(平均值),或使用函數的最大/最小值分數或查詢分數(最大,最小)。

查看function_score documentation瞭解更多詳情。