2013-02-27 42 views
6

我有使用方面的請求看起來像:彈性搜索查詢字詞和得分

{ 
"query": { 
    "bool": { 
    "should": [ 
     { 
     "terms": { 
      "subjects.id": [ 
      1, 
      2, 
      3 
      ], boost: 3 
     } 
     }, 
     { 
     "terms": { 
      "qualification_type.id": [ 
      3, 
      5 
      ], boost: 2 
     } 
     } 
    ] 
    } 
} 

我工作得很好,但屬性更好的成績相匹配,而不是匹配的只有一個主題的文檔的三種主題的文檔。

我的問題是:如果有一個或多個主題匹配,是否有強制讓分數相同的方法?

在此先感謝!

+0

這可能會幫助別人,我發現它很久以後有同樣的問題後http://www.elasticsearch.org/blog/understanding-query-then-fetch-vs-dfs-query-然後取/ – 2014-02-28 15:45:09

回答

9

您可以將術語查詢轉換爲過濾器並將它們包裝到constant score query中。例如:

{ 
    "query": { 
     "bool": { 
      "should": [{ 
       "constant_score": { 
        "filter": { 
         "terms": { 
          "subjects.id": [1, 2, 3] 
         } 
        }, 
        boost: 3 
       } 
      }, { 
       "constant_score": { 
        "filter": { 
         "terms": { 
          "qualification_type.id": [3, 5] 
         } 
        }, 
        boost: 2 
       } 
      }] 
     } 
    } 
} 
+0

是的,我考慮過了,並嘗試過。但是,我不能設置兩個不同的提升權利嗎?我編輯示例以試圖更清楚地瞭解它。 – momo 2013-02-27 14:08:12

+0

您可以將每個詞條過濾器包裝到自己的constant_score查詢中。我添加了一個例子。 – imotov 2013-02-27 14:24:37

+0

嘿,非常感謝,這非常有幫助!我試圖通過做類似的東西來玩custom_score,但從來沒有得到這個想法。 也許你能指點我的文檔,我可以找到這樣的例子嗎?我搜索了很多,並沒有找到附近的東西。 – momo 2013-02-27 16:26:00