2017-07-10 6 views
2

Query StringBoost FieldsElastic Search 1.7で使用しています。それは正常に動作しているが、いくつかのシナリオでは、私は期待された結果を得ていない。
問合せ:エラスティック検索でブーストフィールドを含むクエリ文字列

query 
{ 
    "from": 0, 
    "size": 10, 
    "explain": true, 
    "query": { 
     "function_score": { 
     "query": { 
      "query_string": { 
       "query": "account and data", 
       "fields": [ 
        "title^5" 
        "authors^4", 
        "year^5", 
        "topic^6" 
       ], 
       "default_operator": "and", 
       "analyze_wildcard": true 
      } 
     }, 
     "score_mode": "sum", 
     "boost_mode": "sum", 
     "max_boost": 100 
     } 
    } 
} 

サンプルデータ:

{ 
    "took": 50, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 4, 
     "max_score": 12.833213, 
     "hits": [ 
     { 
      "_id": "19850", 
      "_score": 12.833213, 
      "_source": { 
       "ID": "19850", 
       "Year": "2010", 
       "Title": "account and data :..." 
      } 
     }, 
     { 
      "_id": "16896", 
      "_score": 11.867042, 
      "_source": { 
       "ID": "16896", 
       "Year": "2014", 
       "Title": "effectivness of data..." 
      } 
     }, 
     { 
      "_id": "59862", 
      "_score": 9.706333, 
      "_source": { 
       "ID": "59862", 
       "Year": "2007", 
       "Title": "best system to..." 
      } 
     }, 
     { 
      "_id": "18501", 
      "_score": 9.685843, 
      "_source": { 
       "ID": "18501", 
       "Year": "2010", 
       "Title": "management of..." 
      } 
     } 
     ] 
} 

私は、クエリを使用して、サンプル・データの上に取得していますし、それが期待通りです。しかし今、私がyearweightを100に増やすと、3番目の4番目の結果と4番目の3番目の結果が予想されます。私は多くのことを試みましたが、私は何が間違っているのか分かりません。

答えて

4

ブーストは、照会がブースティング中のフィールドと一致する場合にのみ使用され、スコア弾性検索の計算に、定義したブースティングを掛けます。あなたの質問では、"account and data"を探していますが、その年に一致しないので、今年の増強は使用されません。

ご注文の際に年を考慮していますか?その場合は、あなたはこのようなあなたのクエリにfield_value_factorを追加してみてくださいすることができます

"query" : { 
    "function_score": { 
     "query": { <your query goes here> }, 
     "field_value_factor": { 
      "field": "year" 
     } 
    } 
} 

これは、それは年によって必要な順序付けずにアカウントに年を取りますので、弾性検索は計算スコアで年間掛けます。あなたはそれについてもっと読むことができますhttps://www.elastic.co/guide/en/elasticsearch/guide/current/boosting-by-popularity.html

説明ツールを使用して、弾力的な検索がスコアにどのように反映されたかを把握することができ、結果をその順序で返すことができます。 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html

+0

注文の際に考慮したいフィールドをすべて追加する必要がありますか? –

+0

注文の際に考慮するフィールドを追加する必要があります。 'field_value_factor'の' field'属性は1つのフィールドしか取りません。 2つのフィールドを組み合わせてカスタムロジックを追加したい場合は、ここで言及しているように 'script_score'を代わりに使用してください。https://www.elastic.co/guide/en/elasticsearch/guide/current/function-score -query.html –

+0

これで問題が解決した場合は、回答を承認済みとしてマークすることを忘れないでください。 –

関連する問題