2015-09-27 56 views
1

我正在使用function_score,以便我可以使用它的score_mode作爲我正在使用的bool查詢的最大分數,實際上我內部有兩個布爾查詢,現在我應該把文檔的分數作爲這兩個查詢中的最大分數,我的代碼是下面給出,但是當我傳遞一個字符串匹配兩個然後分數被添加不被採取最大任何人都可以請告訴我,我怎麼能實現這一點。Function_score將bool查詢中的score_mode用作max,但像sum一樣工作?

"function_score": { 
     "boost_mode": "max", 
     "score_mode": "max", 
     "query": { 
     bool: { 
      "disable_coord": true, 
      "should": [ 
      { 
       bool: { 
       "disable_coord": true, 
       "must": [ 
        { 
        "constant_score": { // here i am using this because to remove tf/idf factors from my scoring 
         boost: 1.04, 
         "query": { 
         query_string: { 
          query: location_search, 
          fields: ['places_city.city'], 
      //    boost: 1.04 
         } 
         } 
        } 
        } 
       ] 
       } 
      }, 
      { 
       "constant_score": { // here i am using this because to remove tf/idf factors from my scoring 
       boost: 1, 
       "query": { 
        "fuzzy_like_this" : { 
        "fields" : ["places_city.city"], 
        "like_text" : "bangaloremn", 
        "prefix_length": 3, 
        "fuzziness": 2 
        } 
       } 
       } 
      } 
     ], "minimum_should_match": 1 
     } 
    } 
    }  

回答

2

是布爾查詢需要設計的總和。如果你想要兩個查詢的最高分數,你應該看看dismax查詢。 Dismax設計爲pick a "winner"

粗略地說,這看起來像

{"query": 
    "dismax": { 
     "queries": [ 
      { /* your first constant_score query above */}, 
      {/* your second constant_score query from above */} 
     ] 
    } 
} 

不幸的是,功能評分查詢沒有在時間上有多個文本查詢操作的一個好方法。見this question。如果你想用多個查詢的分數來完成任何複雜的數學運算,Solr實際上在這方面有更多的靈活性。

+0

我可以使用dismax查詢比較分數與一個布爾查詢和costant分數查詢? –

+0

是的,你可以比較任何類型的查詢。 –

+0

你能否也請告訴我一件事,在fuzzy_like_this查詢下如何訪問上述類型的字段我想訪問「places_city」類型的名稱「city」的字段,但無法做到這一點? –

相關問題