How to highlight ngram markers in one word using elastic search

I would like to highlight only ngrams that match, not the whole word. Example:

term: "Wo" highlight should be: "<em>Wo</em>nderfull world!" currently it is: "<em>Wonderfull</em> world!" 

Display:

 { "global_search_1495732922733" : { "mappings" : { "meeting" : { "properties" : { ... "name" : { "type" : "text", "analyzer" : "meeteor_index_analyzer", "search_analyzer" : "meeteor_search_term_analyzer" }, ... } } } } } 

Analyzers:

 "analysis" : { "filter" : { "meeteor_stemmer" : { "name" : "english", "type" : "stemmer" }, "meeteor_ngram" : { "type" : "nGram", "min_gram" : "2", "max_gram" : "15" } }, "analyzer" : { "meeteor_search_term_analyzer" : { "filter" : [ "lowercase", "asciifolding" ], "tokenizer" : "standard" }, "meeteor_index_analyzer" : { "filter" : [ "lowercase", "asciifolding", "meeteor_ngram" ], "tokenizer" : "standard" }, "meeteor_project_id_analyzer" : { "tokenizer" : "standard" } } }, 

Specific example:

 curl -XGET 'localhost:9200/global_search/meeting/_search?pretty' -H 'Content-Type: application/json' -d' { "query": { "match": { "name": "Me" } }, "highlight":{ "fields": { "name": {} } } } ' 

Result:

  "...highlight" : { "name" : [ "Sad <em>Meeting</em>" ] } 
+5
source share
1 answer

The correct way to achieve the desired result is to use ngram as a tokenizer , not a filter. You can do something like this:

 "analysis" : { "filter" : { "meeteor_stemmer" : { "name" : "english", "type" : "stemmer" } }, "tokenizer" : { "meeteor_ngram_tokenizer" : { "type" : "nGram", "min_gram" : "2", "max_gram" : "15" } }, "analyzer" : { "meeteor_search_term_analyzer" : { "filter" : [ "lowercase", "asciifolding" ], "tokenizer" : "standard" }, "meeteor_index_analyzer" : { "filter" : [ "lowercase", "asciifolding" ], "tokenizer" : "meeteor_ngram_tokenizer" }, "meeteor_project_id_analyzer" : { "tokenizer" : "standard" } } }, 

It will generate ngram allocation for you as follows:

  "...highlight" : { "name" : [ "Sad <em>Me</em>eting" ] } 
+2
source

Source: https://habr.com/ru/post/1268257/


All Articles