1

実際に使用しているboolクエリの最大スコアとしてscore_modeを使用できるように、function_scoreを使用しています。実際に内部に2つのブールクエリがあり、ドキュメントのスコアを両方のクエリの中で最大スコアにしたい場合は、私のコードを以下に示しますしかし、両方を一致させるために文字列を渡すと、スコアが追加されて最大になることはありません。どうすればそれを達成できるか教えてください。

"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

はい、ブールクエリは設計上合計を取ります。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 に答える