私はElasticsearchのマルチマッチクエリ(Java APIを使用)を作成して、 "タイプに合わせた検索"プログラムを作成しようとしています。クエリは、title
とdescription
の2つのフィールドに適用され、ngramで分析されます。私のElasticsearchマルチマッチクエリは、プレフィックスのみを検索するのはなぜですか?
私の問題は、Elasticsearchが、という単語の最初の部分を検索しようとしているようです。は私の質問と同じです。例えば、私は「ナット」を検索すると、それは「ナット」、「ナッツ」、「ヌテッラ」をフィーチャーした文書などで一致したが、それは「クルミ」をフィーチャーした文書と一致していません、 はと一致する必要があります。ここで
は私の設定です:ここでは
{
"index": {
"analysis": {
"analyzer": {
"edgeNGramAnalyzer": {
"tokenizer": "edgeTokenizer",
"filter": [
"word_delimiter",
"lowercase",
"unique"
]
}
},
"tokenizer": {
"edgeTokenizer": {
"type": "edgeNGram",
"min_gram": "3",
"max_gram": "8",
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
は私のマッピングの関連する部分である:
{
"content": {
"properties": {
"title": {
"type": "text",
"analyzer": "edgeNGramAnalyzer",
"fields": {
"sort": {
"type": "keyword"
}
}
},
"description": {
"type": "text",
"analyzer": "edgeNGramAnalyzer",
"fields": {
"sort": {
"type": "keyword"
}
}
}
}
}
}
そしてここでは、私のクエリです:
new MultiMatchQueryBuilder(query).field("title", 3).field("description", 1).fuzziness(0).tieBreaker(1).minimumShouldMatch("100%")
あなたが任意のアイデアを持っていますか私は何が間違っている可能性がありますか?
はありがとうございました!それは動作し、あなたは私に何時間ものデバッグをさせてくれました! – Daneel
恐ろしい、それはうまくいった;-) – Val