2016-07-12 5 views
1

tf-idf検索のフィールドノルムを無視してelasticsearchで検索を実行したいと思います。これはignoring the field norms by setting the index mappingsで行うことができます。しかし、これは索引付けの変更によって実現されると思われます。検索を変更したいだけです(他のタイプの検索の基準が必要です)。これを達成する最良の方法は何ですか?私はelasticsearch.jsを私のelasticsearchへのインターフェイスとして使用しています。elasticsearch tf-idfと検索でフィールド長のノルムを無視する

答えて

4

規範を無効にすることはできませんが、Multi Fields APIを使用して、規範が無効になっている追加フィールドを追加することができます。そうでない場合は、規範やmy_field.no_norms上が必要な場合

PUT /my_index 
{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "my_field": { 
      "type": "string", 
      "fields": { 
      "no_norms": { 
       "type": "string", 
       "norms": { 
       "enabled": false 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

今、あなたはmy_fieldに検索することができます。新しいフィールドをすべてのドキュメントで使用できるようにするには、データを再インデックスする必要があります。マッピングに追加するだけで、ドキュメントを終了する場合は何も変更されません。

2

これは私が使い終わったアプローチです。 tf-idf(現在のelasticsearchデフォルト)を使用するのではなく、BM25を使用しました。また、フィールド長のノルムの重要性を表すパラメータ「b」を有する。 "b = 0"の場合、フィールド長のノルムは無視され、デフォルト値は0.75です。 BM25については、hereを参照してください。私elasticsearch.yml内部で私は、カスタムの類似性は、インデックス作成時に定義することができますJavaScript APIのelasticsearchを使用する人は

index : 
    similarity: 
    default: 
     type: BM25 
     b: 0.0 
     k1: 1.2 
    norm_bm25: 
     type: BM25 
     b: 0.75 
     k1: 1.2 

を持って

client.indices.create({ 
    index: "db", 
    body: { 
     settings: { 
      number_of_shards: 1, 
      similarity : "norm_bm25" 
     } 
    } 
} 
関連する問題