2017-11-20 14 views
0

multi_matchphrase_prefixとし、Elasticsearch 5.5の全文検索に使用しています。 ESクエリは、私は次の応答にElasticsearch関連性スコアはどのように計算されますか?

[ 
    { 
    "_index": "items_index", 
    "_type": "item", 
    "_id": "2", 
    "_score": 0.61426216, 
    "_source": { 
     "item": { 
     "keywords": "amul butter, milk, butter milk, flavoured", 
     "name": "Flavoured Butter" 
     } 
    } 
    }, 
    { 
    "_index": "items_index", 
    "_type": "item", 
    "_id": "1", 
    "_score": 0.39063013, 
    "_source": { 
     "item": { 
     "keywords": "amul butter, milk, butter milk", 
     "name": "Butter Milk" 
     } 
    } 
    } 
] 

マッピングを取得しています

{ 
    query: { 
    bool: { 
     must: { 
     multi_match: { 
      query: "butt", 
      type: "phrase_prefix", 
      fields: ["item.name", "item.keywords"], 
      max_expansions: 10 
     } 
     } 
    } 
    } 
} 

のように見え、次の通りである(私はデフォルトのマッピングを使用しています) "name": "Flavoured Butter"

{ 
    "items_index" : { 
    "mappings" : { 
     "parent_doc": { 
     ... 
     "properties": { 
      "item" : { 
      "properties" : { 
       "keywords" : { 
       "type" : "text", 
       "fields" : { 
        "keyword" : { 
        "type" : "keyword", 
        "ignore_above" : 256 
        } 
       } 
       }, 
       "name" : { 
       "type" : "text", 
       "fields" : { 
        "keyword" : { 
        "type" : "keyword", 
        "ignore_above" : 256 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
} 

どうitem0.61426216のより高いスコアを取得"name": "Butter Milk"とスコア0.39063013のドキュメントに対して

私はブーストを"item.name"に適用して、同じ検索結果を得るフォーム検索フィールドを削除しようとしました。

Elasticsearchのスコアはどのように機能しますか? Relavanceに関して正しい結果を上回っていますか? phrase_prefixため

+0

インデックスのマッピングを教えてください。なぜなら、私は '' name ''のdocと '' 0.37598053'という別の得点値を得ているからです: "Flavored Butter" ' –

+0

@ChandraPraneethN私はデフォルトのマッピングを使用しています。唯一のことは 'item'はその親の内部にネストされたドキュメントですが、それは何の違いもありません。 –

答えて

0

得点は、ドキュメントのスコアはここitem.keywordsあるbest_field、から入手したスコアであることを意味し、best_fieldsと同様です。

ので、item.name

参照してくださいを獲得するために追加されていません。multi-match-types

あなたがkeywordsnameからスコアを結合する2つのmulti_matchクエリを使用することができます。

{ 
    "query": { 
     "bool": { 
     "must": [{ 
      "multi_match": { 
       "query": "butt", 
       "type": "phrase_prefix", 
       "fields": [ 
        "item.keywords" 
       ], 
       "max_expansions": 10 
      } 
     },{ 
      "multi_match": { 
       "query": "butt", 
       "type": "phrase_prefix", 
       "fields": [ 
        "item.name" 
       ], 
       "max_expansions": 10 
      } 
     }] 
     } 
    } 
} 
+0

正しい結果を得るためにこのクエリを書き直す方法はありますか? –

+0

2つの 'multi_match'クエリを使用できます。答えを更新しました。 –

関連する問題