小さなフィールド(地名など)に対してElasticSearchを使用して、文字ごとの先行入力オートコンプリートを実装する標準的な方法はありますか?
(これを書いている時点では、検索を介して利用できる多くの議論がありますが、決定的なものは何もありません。(また、Apache Lucene 4のオートコンプリート/提案の機能サポートの効果についての話もあります。))
考えてくれてありがとう。
小さなフィールド(地名など)に対してElasticSearchを使用して、文字ごとの先行入力オートコンプリートを実装する標準的な方法はありますか?
(これを書いている時点では、検索を介して利用できる多くの議論がありますが、決定的なものは何もありません。(また、Apache Lucene 4のオートコンプリート/提案の機能サポートの効果についての話もあります。))
考えてくれてありがとう。
EdgeNGramベースのアナライザーを使用できます。http: //www.elasticsearch.org/guide/reference/index-modules/analysis/edgengram-tokenizer.htmlを参照してください。
または、提案プラグインを使用します:https ://github.com/spinscale/elasticsearch-suggest-plugin
HTH
Davidが書いたように、NGramsまたはsuggestプラグインを使用できます。lucene 4を使用すると、個別のインデックスを管理する必要なしに、すぐに使用できるより優れた自動提案を行うことができます。
今のところ、フィールドに用語ファセットを作成し、正規表現パターンを使用して、関連するプレフィックスで始まるエントリのみを保持することもできます。
"facets" : {
"tag" : {
"terms" : {
"field" : "field_name",
"regex" : "prefix.*"
}
}
}
正規表現は単なる例であり、改善することができ、適切な正規表現フラグを使用して大文字と小文字を区別しないようにすることもできます。また、十分なメモリがない限り、多くの固有の用語を含むフィールドでファセットを作成することは良い考えではないことに注意してください。
バージョン0.90.3以降で利用可能な組み込みのオートコンプリートサジェスタを使用します。
http://www.elastic.co/guide/en/elasticsearch/reference/master/search-suggesters-completion.html
それは非常に高速で、まさにそのユースケースのために開発されました。