あなたの質問は、不完全ではあるが。私はあなたにいくつかのアイデアを提供しようとします。
確かにプレフィックスクエリはありますが、はるかに効率的にエッジngramアナライザを構築することです。そうすれば、データの挿入とクエリの準備がはるかに高速になります。エッジngramは、任意の順序で表示される単語を自動補完できるため、機能を実行するための最も柔軟な方法です。これを行う必要はありませんが、「入力時に検索」する必要がある場合は、補完スキルを使用するのが最善の方法です。単語の真ん中に表示される文字列を見つける必要がある場合は、ngramアナライザーをチェックすることができます。
私のコードからエッジngramアナライザを設定する方法は次のとおりです。
"settings": {
"analysis": {
"filter" : {
"edge_filter" : {
"type" : "edge_ngram",
"min_gram": 1,
"max_gram": 256
}
},
"analyzer": {
"edge_analyzer" : {
"type" : "custom",
"tokenizer": "whitespace",
"filter" : ["lowercase", "edge_filter"]
},
"lowercase_whitespace": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [ "lowercase" ]
}
}
}
},
"mappings": {
"my_type": {
"properties": {
"name": {
"type": "keyword",
"fields": {
"suggest": {
"type": "text",
"analyzer" : "edge_analyzer",
"search_analyzer": "lowercase_whitespace"
}
}
}
}
}
}