2013-08-15 2 views
6

ファセットを使用したインデックスで最もよく使われる用語を見つけることができると私は知っています。入力を次の例elasticsearchで最も多く使われているフレーズを見つけるには?

"A B C" 
"AA BB CC" 
"A AA B BB" 
"AA B" 

用語ファセットはこの返します

B:3 
AA:3 
A:2 
BB:2 
CC:1 
C:1 

をしかし、私はそれが以下のリストを表示することが可能です思ったんだけど:

AA B:2 
A B:1 
BB CC:1 

....etc... 

ですElasticSearchにそのような機能がありますか?

+2

'shingle'アナライザを使用するフィールドでカスタムアナライザを定義しようとしているかもしれません。これは単語を組み合わせることによってトークンを作成します(あなたが求めているように)。ファセットがこれらの結合されたトークンでカウントを返すかどうかを調べることができます。 [シングル・トークン・フィルターのes文書を見る](http://www.elasticsearch.org/guide/reference/index-modules/analysis/shingle-tokenfilter/) – ramseykhalaf

+0

ありがとう、これは機能するかもしれません。ファセットはトークンを返すので、おそらくこれもこれらのphrase_tokensを返します。 これは既存のインデックスには適用されません。これはファイルサイズを大きくしすぎますか? 毎日5GBのデータにこの機能が必要になります。そして、その日が終わった後、私はもはやそれを必要としません。だから、私は毎日の終わりに5GBのデータをインデックス化し、ファセットの結果を保存し、その新しいインデックスデータを削除することをお勧めします。 (これはループで続きます)その他のオプションはありますか? – shyos

+0

私は答えがhttp://stackoverflow.com/questions/39380463/get-top-100-most-used-three-word-phrases-in-all-documentsにあると信じています – AlexG

答えて

2

ramseykhalafのコメントで述べたように、シングルフィルタは長さnの単語のトークンを生成します。

"settings" : { 
    "analysis" : { 
     "filter" : { 
      "shingle":{ 
       "type":"shingle", 
       "max_shingle_size":5, 
       "min_shingle_size":2, 
       "output_unigrams":"true" 
      }, 
      "filter_stop":{ 
       "type":"stop", 
       "enable_position_increments":"false" 
      } 
     }, 
     "analyzer" : { 
      "shingle_analyzer" : { 
       "type" : "custom", 
       "tokenizer" : "whitespace", 
       "filter" : ["standard," "lowercase", "shingle", "filter_stop"] 
      } 
     } 
    } 
}, 
"mappings" : { 
    "type" : { 
     "properties" : { 
      "letters" : { 
       "type" : "string", 
       "analyzer" : "shingle_analyzer" 
      } 
     } 
    } 
} 

詳しくはblog postを参照してください。

+0

私は帯状疱疹を付け加えました。 http://www.elasticsearch.org/blog/searching-with-shingles/stillでは、最もよく使われるフレーズが何であるかを知ることができません。どのように我々はファセットとシングルを使用するか、http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-stats-facet.html、私はまだ1つの単語の結果を得る、 "{用語:term1、count:203}」、「{term:」帯状疱疹はどのように「:count 5}」になるのですか? –

+0

私は同じ問題を抱えています - 私はまだこれを試していませんでした - しかし、あなたがshingledフィールドで集計/ファセッティングをするのが助けになりますか?私は分析の途切れについては分かりません。例えば、私が「水穴」と「水穴」と「水穴」を持っていれば、それらは同じにつながりますが、そうではないかもしれません。 http://project.carrot2.org/index.htmlは本当にこれのために作られていますが、あなたが弾力的な検索だけでそれを行うことができればそれはすばらしいでしょう。 – Yehosef

+0

用語と重要な用語集合は、shingledトークンでは機能しません。なぜまだ知りません。 –

0

elasticsearchでネイティブにこれを行うことができるかどうかはわかりません。しかし、あなたはCarrot2-http://project.carrot2.org/index.htmlをチェックして、あなたが望むもの(おそらくもっと多くのもの)を達成するのに興味があるかもしれません。

関連する問題