Symfony3 プロジェクトにhttps://github.com/ongr-io/ElasticsearchBundleを使用しています。このバンドルの理由は、私のプロジェクトが推進力を使用しているためです。
これまでのところ、すべてが順調で、非常にうまく機能しています。しかし今、単語の部分文字列を検索する機能を追加したいと考えています。たとえば、Test01、Test02、Test03 などの名前のアイテムがあり、たとえば Test を検索しようとすると、結果が得られません。Test01 のように単語全体を入力したところです。
ワイルドカード検索の可能性について読んだことがありますが、別の解決策では、ngram または edge_ngram を使用する方がより良い解決策になると言われています。
次のように構成で指定しようとしました
ongr_elasticsearch:
analysis:
filter:
incremental_filter:
type: edge_ngram
min_gram: 3
max_gram: 10
analyzer:
incrementalAnalyzer:
type: custom
tokenizer: standard
filter:
- lowercase
- incremental_filter
managers:
default:
index:
hosts:
- %elastic_host%:%elastic_port%
index_name: index
analysis:
analyzer:
- incrementalAnalyzer
filter:
- incremental_filter
mappings:
- AppBundle
しかし、思い通りの結果は得られませんでした。誰でもそれで私を助けることができますか?フィルターとアナライザーの違いは何ですか? さまざまなタイプのさまざまなフィールドで検索したいので、MultiMatchQuery を使用しています。
$multiMatchQuery =
new MultiMatchQuery(
[
'name^12',
'product_name^8',
'itemno^18',
'number^7',
'category^6',
'company^4',
'motor^3',
'chassis^13',
'engine^14',
'description'
],
$term
);
$search->addQuery($multiMatchQuery);
「not_analyzed」フィールドも定義しようとしました。
あなたの助けを願っています!
ありがとう。