Function_score使用bool查询中的score_mode作为最大值但是像sum一样工作?

时间:2015-09-27 14:44:38

标签: elasticsearch relevance function-query

我正在使用function_score以便我可以使用其score_mode作为我正在使用的bool查询的最高分数我实际上有两个布尔查询现在我希望文档的分数是两个查询中的最高分数我的代码在下面给出但是当我传递一个字符串以进行匹配时,则添加的分数不是最大值,任何人都可以告诉我如何实现这一点。

"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
       }
     }
  }    

1 个答案:

答案 0 :(得分: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实际上在这方面有更多的灵活性。