1

私は、N個の単語を入力し、同じ列にヒットするN個の単語をすべて検索することになっているドキュメントファインダーを使用しています。これらの N 個の単語は順序付けられ、最初と 2 番目の単語が異なるドキュメントに一致した場合、最初の単語に一致したドキュメントのスコアが高くなる必要があります。これまでのところ、私はこれを持っています:

{
"from": 0, 
"query": {
    "custom_filters_score": {
        "filters": [
            {
                "boost": 10, 
                "filter": {
                    "term": {
                        "descripcion": "lost"
                    }
                }
            }, 
            {
                "boost": 9, 
                "filter": {
                    "term": {
                        "format": "in"
                    }
                }
            }
        ], 
    "query":{...(mandatory conditions regardless of the search pattenrs)...}}
    }
} 
}

これは、最初の単語に一致すると、2 番目の単語よりも高くブーストされるという意味で適切に機能します。ただし、問題は、最初と 2 番目の単語の両方に一致する場合、合計スコアが最高値だけでなく、両方のフィルターの合計になる必要があることです。上記の例では、「lost in space」という説明を含むドキュメントは、「lost」を含むドキュメントよりも高いスコアを獲得する必要があります。

スクリプトで両方のフィルターからのスコアを合計する必要がありますか? もしそうなら、どのように?

ありがとう!

4

1 に答える 1

0

Elasticsearch 0.90.4 は使用できますか? その場合、custom_filters_score は廃止され、[関数スコア クエリ][1] に置き換えられます: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

関数スコア クエリを使用すると、スコアを合計するように指定できます。

{
  "from": 0, 
  "query": {
    "function_score": {
        "functions" : [
            {
                "boost": 10, 
                "filter": {
                    "term": {
                        "descripcion": "lost"
                    }
                }
            }, 
            {
                "boost": 9, 
                "filter": {
                    "term": {
                        "format": "in"
                    }
                }
            }
        ], 
        "query":{...(mandatory conditions regardless of the search pattenrs)...},
        "score_mode" : "sum"
    }
  } 
}
于 2013-10-12T02:38:52.370 に答える