5

検索システムを Solr から Elasticsearch に更新しています。すでに多くのことを改善しましたが、製品 (e コマース Web サイト) の人気によってドキュメント (製品) のスコアを高めることはまだ正しくありません。

これが現在のものです(多くの無関係なビットが取り除かれています):

{
    "query": {
        "function_score": {
            "query": {
                "multi_match" : {
                    "query":    "renal dog food",
                    "fields": [ "family_name^20", "parent_categories^2", "description^0.2", "product_suffixes^8", "facet_values^5" ],
                    "operator":   "and",
                    "type":       "best_fields",
                    "tie_breaker": 0.3

                }
            },
            "functions": [{
                "script_score": {
                    "script": "_score * log1p(1 + doc['popularity_score'].value)"
                }
            }],
            "score_mode": "sum"
        }
    },
    "sort": [
        { "_score": "desc" }
    ],
}

popularity_scoreフィールドには、このアイテムを含む過去 6 週間の合計注文数が含まれています。注文されたことのないアイテムもあれば、30,000 を超えるアイテムもあります (ビジネスを成長させ続けるにつれて、さらに多くのアイテムが増える可能性があります)。かなりの範囲です。

私たちが抱えている問題は、文書 (製品) が、テキストに関しては非常によく一致するかもしれないが、あまり人気がないということです。次に、あまり関連性のない別の製品がクエリにほぼ一致しますが、非常に人気があるため、リストが跳ね上がります。私たちが探しているのは、 を他の一致する結果とpopularity_score比較して取得し、そのままpopularity_score取得するのではなく、何らかの形式の正規化を取得できるようにするものです (log1p では不十分な場合があります)。誰か提案やアイデアはありますか?

ありがとうございました!

4

0 に答える 0