/ /アナライザーの適用を停止するオプションはありますか? --java、elasticsearch

アナライザーの適用を停止するオプションはありますか? -java、elasticsearch

こんにちは私はElasticSearchを使用してミニアプリケーションを開発しています。

設定:-

        settingBuilder = XContentFactory.jsonBuilder().startObject()
.startObject("index")
.startObject("analysis")
.startObject("analyzer")
.startObject("custom_analyzer")
.field("type", "custom")
.field("tokenizer","keyword")
.field("filter", new String[]{"standard","ngram_filters"})
.endObject()
.endObject()
.startObject("filter")
.startObject("ngram_filters")
.field("type", "nGram")
.field("min_gram", "1")
.field("max_gram","10")
.endObject()
.endObject()
.endObject()
.endObject()
.endObject();

マッピング:-

        contentBuilder = XContentFactory.jsonBuilder().startObject()
.startObject("students")
.startObject("properties")
.startObject("searchColumn")
.field("analyzer", "custom_analyzer")
.field("type", "string")
.endObject()
.startObject("firstName")
.field("type","string")
.field("analyzer", "custom_analyzer")
.field("store", "yes")
.endObject()
.startObject("lastName")
.field("type","string")
.field("analyzer", "custom_analyzer")
.field("store", "yes")
.endObject()
.startObject("registerNumber")
.field("type", "long")
.field("analyzer", "custom_analyzer")
.field("store", "yes")
.endObject()
.endObject()
.endObject()
.endObject();

ここでは、nGramフィルターを指定しました。しかし、何らかの理由で検索プロセスを実行しているときに、prefixFilterまたはprefixQueryにアナライザーを適用したくありません。オプションはありますか。 私がここで直面している問題は、

たとえば。

    apple
one apple
two apple

それらがからのfirstName値であると想定します例。 文字「a」のプレフィックスを検索するときは、「apple」ドキュメントのみを取得する必要があります。しかし、今、私はnGramのためにすべての結果を得ています...これに対する解決策を教えてもらえますか?

回答:

回答№1は1

のマッピングを定義するとき 文字列フィールド を使用するだけで、インデックス時とクエリ時に適用されるさまざまなアナライザーを定義できます。 index_analyzer そして search_analyzer プロパティ。あなたは現在、 analyzer 同じを適用するためのショートカットであるプロパティ

2つの異なるアナライザーを定義するだけです。1つはngramを作成し、もう1つは作成しません。次にマッピングを次のように更新します。

.startObject("firstName")
.field("type","string")
.field("index_analyzer", "ngrams_analyzer")
.field("search_analyzer", "search_analyzer_without_ngrams")