名前をオートコンプリートできるようにしたい。
たとえば、名前が の場合、ドキュメントを検索して取得できるようJohn Smith
にしたいと考えています。Jo
Sm
John Sm
jo sm
また、ドキュメントの照合はしたくありません。
私は現在、このアナライザーを持っています:
return array(
'settings' => array(
'index' => array(
'analysis' => array(
'analyzer' => array(
'autocomplete' => array(
'tokenizer' => 'autocompleteEngram',
'filter' => array('lowercase', 'whitespace')
)
),
'tokenizer' => array(
'autocompleteEngram' => array(
'type' => 'edgeNGram',
'min_gram' => 1,
'max_gram' => 50
)
)
)
)
)
);
これの問題は、最初にテキストを分割してから、エッジグラムを使用してトークン化することです。
これにより、次のようになります。
j
jo
joh
john
s
sm
smi
smit
smith
これは、john smith
orを検索してjohn sm
も何も返されないことを意味します。
したがって、次のようなトークンを生成する必要があります
j
jo
joh
john
s
sm
smi
smit
smith
john s
john sm
john smi
john smit
john smith
。
これらの余分なトークンを生成するようにアナライザーを設定するにはどうすればよいですか?