1

我正在使用 function_score 以便我可以使用它的 score_mode 作为我正在使用的布尔查询的最大分数实际上我有两个布尔查询现在我希望文档的分数是两个查询中的最大分数我的代码如下但是当我传递一个字符串来匹配两者时,分数会被添加而不是最大的,谁能告诉我我怎么能做到这一点。

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

1 回答 1

2

是的,布尔查询按设计需要一个总和。如果您想要两个查询的最高分,您应该查看dismax查询。Dismax 旨在挑选“赢家”

粗略地说,这看起来像

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

不幸的是,函数分数查询并没有一种很好的方式来一次对多个文本查询进行操作。看到这个问题。如果您想对多个查询的分数进行任何复杂的数学运算,Solr 实际上在这方面具有更大的灵活性。

于 2015-09-28T00:42:31.993 回答