2015-02-09 64 views
0

我有存儲用戶知道的技巧文件:ElasticSearch:如何在子組中查詢?

{ 
"size": 1000, 
"query": { 
    "function_score": { 
     "query": { 
      "bool": { 
       "should": [ 
        { 
         "query_string": { 
          "query": "Objective-C", 
          "default_field": "user.skill.name" 
         } 
        }, 
        { 
         "range": { 
          "user.skill.weight_relative": { 
           "gte": 1 
          } 
         } 
        }, 
        { 
         "range": { 
          "user.skill.weight_absolute": { 
           "gte": 1 
          } 
         } 
        }, 
... 

問題我遇到的是ElasticSearch將返回用戶,例如,skill.name == Objective-C但權重爲0的相對和絕對的,也用戶的分數超過1,但skill.name是完全不同的東西。

有沒有什麼辦法可以告訴彈性,我不希望這些搜索是「本地」範圍的?我不知道這個場景的名字。對不起,如果我沒有正確地調用它。

我正在運行的查詢還具有自定義_score功能,該功能可爲具有第三個指標(不包括與其無關的指標)的用戶提供更高的分數。可能是因爲這種自定義分數功能?可能會給「錯誤」的用戶一個更高的分數,因爲第三個指標高於具有所需技能和水平的用戶?

謝謝。

+1

我完全不理解你的問題,但它看起來像你想'必須'的條款,而不是'應該' – 2015-02-09 17:28:46

+0

請記住'應該'條款可以被認爲是一個布爾'OR'而不是'AND',這更多是'必須'實現的) - 我認爲默認情況下,任何滿足這些條件之一(並且可以是任何一個)的文檔都會匹配,儘管這個要求可以通過'minimum_should_match'明確指定。 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html – rchang 2015-02-09 20:09:18

+0

嗨,大家好,謝謝你的回覆。它不能成爲'必須',因爲'應該'條件只是爲了增加分數。設想一個用戶在技能上的重量爲0,它仍然應該出現,但較低。 – Topikito 2015-02-10 09:29:17

回答