0

「入力どおりに検索」プログラムを作成するために、(Java API を使用して) Elasticsearch マルチマッチ クエリを作成しようとしています。titleクエリはとの 2 つのフィールドに適用さdescriptionれ、ngram として分析されます。

私の問題は、Elasticsearch がクエリのように始まる単語だけを見つけようとしているように見えることです。たとえば、"nut" を検索すると、" nut "、" nuts "、" Nutella " などのドキュメントと一致しますが、一致するはずの " walnut " を含むドキュメントとは一致しません。

ここに私の設定があります:

{
    "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%")

私が間違っている可能性があることを知っていますか?

4

1 に答える 1