/ / Existuje nejaká možnosť prestať používať analyzátor? - java, elasticsearch

Existuje nejaká možnosť zastaviť aplikáciu analyzátora? - java, elasticsearch

Ahoj, vyvíjam mini aplikáciu pomocou Elastic Search.

Nastavenie: -

        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();

Mapovanie: -

        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();

Tu som určil nGram filter. ale z nejakého dôvodu pri hľadaní nechcem použiť analyzátor prefixFilter alebo prefixQuery. existuje nejaká možnosť. Problém, ktorému tu čelím, je,

napr.

    apple
one apple
two apple

predpokladajme, že sú to hodnoty firstName zpríklad. keď hľadám predponu znaku „a“, musím chcieť získať iba dokument „jablka“. ale práve teraz dostávam všetky výsledky kvôli nGram ... môžete mi prosím nejaké riešenie?

odpovede:

1 pre odpoveď č. 1

Keď definujete mapovanie pre svoj reťazcové polia môžete definovať rôzne analyzátory použité v čase indexu a v čase dotazu, jednoducho pomocou index_analyzer a search_analyzer nehnuteľnosť. Momentálne používate analyzer vlastnosť, ktorá je skratkou na uplatnenie toho istéhoanalyzátor v čase indexu aj dotazu. V skutočnosti zvyčajne máte podobný, ak nie rovný reťazec textovej analýzy použitý v čase indexu a v čase dotazu, ale ngramy sú určite výnimkou, pretože z ich dotazov nechcete robiť ngramy.

Stačí definovať dva rôzne analyzátory, jeden, ktorý vytvára ngramy a druhý, ktorý ich neaktualizuje. Aktualizujte svoje mapovanie takto:

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