すべては、照会している文字列を分析する方法によって異なります。同じ文字列フィールドに複数のアナライザーを適用することをお勧めします。ここで
"name": {
"type": "string",
"analyzer": "keyword_analyzer",
"fields": {
"name_ac": {
"type": "string",
"index_analyzer": "string_autocomplete_analyzer",
"search_analyzer": "keyword_analyzer"
}
}
}
は、keyword_analyzerとstring_autocomplete_analyzerがアナライザは、あなたのインデックスの設定で定義されています。以下は、オートコンプリート/提案者の機能が欲しいその上に「名前」フィールドのマッピングの例があります。以下は例です:
"keyword_analyzer": {
"type": "custom",
"filter": [
"lowercase"
],
"tokenizer": "keyword"
}
"string_autocomplete_analyzer": {
"type": "custom",
"filter": [
"lowercase"
,
"autocomplete"
],
"tokenizer": "whitespace"
}
ここでオートコンプリートが分析フィルタである:これを設定した後
"autocomplete": {
"type": "edgeNGram",
"min_gram": "1",
"max_gram": "10"
}
自動提案をElasticsearchで検索するとき、あなたはmultiMatchを利用することができる照会の代わりに、ここではマルチマッチの個々のフィールドにブーストを提供します。以下は、Javaでの例です:
QueryBuilders.multiMatchQuery(yourSearchString,"name^3","name_ac");
あなたのニーズに従って(3 ^)ブーストを変更する必要があるかもしれません。
これでもあなたの要件を満たしていない場合、最初の単語に基づいて文字列を分析し、そのフィールドをマルチマッチに含めるもう1つのアナライザーがあると見ることができます。これらの分析フィルタと
"first_word_name_analyzer": {
"type": "custom",
"filter": [
"lowercase"
,
"whitespace_merge"
,
"edgengram"
],
"tokenizer": "keyword"
}
::以下は、このような解析の例がある
"whitespace_merge": {
"pattern": "\s+",
"type": "pattern_replace",
"replacement": " "
},
"edgengram": {
"type": "edgeNGram",
"min_gram": "1",
"max_gram": "32"
}
あなたがに基づいて、最も最適な結果に到達するためにブースト値にいくつかの臨床試験を行う必要があり、あなたの要件。お役に立てれば。