FreeStyleWiki

Elasticsearch

このエントリーをはてなブックマークに追加

[検索技術]

Elasticsearch

  • 主に検索時のスコアの出し方について

  スコアリングの算出方式

Elasticsearchの検索スコア式を変える方法:

  • デフォルト式
double tf = Math.sqrt(doc.freq);                                      // Elasticsearchに格納されている時点でドキュメントには出現頻度(=doc_freq)がついているのかなぁ
double idf = Math.log((field.docCount+1.0)/(term.docFreq+1.0)) + 1.0; // 
double norm = 1/Math.sqrt(doc.length);                                // 

return query.boost * tf * idf * norm;
  • 用語の意味
    • TF = Term Frequency
    • IDF = Inverse Document Frequency
  • Term Frequency
    • tf(term frequency)とは、そのままの意味。ある単語の出現頻度である。ターム頻度。ある単語tがある文書d中に現れる回数を、文書d中の全ての単語数(重複を許す)で割った値を意味する。
  • Inverse Document Frequency
    • tf-idf(tf-idf重み)とは、tf重みとidf重みの積で与えられる。情報検索で最も有名で良く利用される重み付けの方法である。tf-idfの値は、文書中のタームの出現頻度と、文書集合中のタームの希少さに応じて増加します。式は以下の通り。(t=ターム、d=ドキュメント)ここでも、対数の底は重要でないので、なんでも良い

W_{t,d} = log(1 + tf_{t,d}) \cdot log \frac{N}{df_t}

  • tf-idfを重みとして利用した場合の、ある文書のスコアは、以下のようになる。(q=クエリ、d=ドキュメント)

Score = \Sigma_{t \in q \cap d} tf \cdot idf_{t,d}