我使用n-gram标记器在弹性搜索中创建了一个自动建议器.现在我想突出显示用户在自动建议列表中输入的字符序列.为此,我使用弹性搜索中可用的荧光笔,我的代码如下所示,但在输出中,完整的术语正在突出显示我出错的地方.
{ "query": { "query_string": { "query": "soft", "default_field": "competency_display_name" } }, "highlight": { "pre_tags": [""], "post_tags": [""], "fields": { "competency_display_name": {} } } }
结果是
{ "took": 8, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 1, "max_score": 1, "hits": [ { "_index": "competency_auto_suggest", "_type": "competency", "_id": "4", "_score": 1, "_source": { "review": null, "competency_title": "Software Development", "id": 4, "competency_display_name": "Software Development" }, "highlight": { "competency_display_name": [ "Software Development" ] } } ] } }
制图
"competency":{ "properties": { "competency_display_name":{ "type":"string", "index_analyzer": "index_ngram_analyzer", "search_analyzer": "search_term_analyzer" } } }
设置
"analysis": { "filter": { "ngram_tokenizer": { "type": "nGram", "min_gram": "1", "max_gram": "15", "token_chars": [ "letter", "digit" ] } }, "analyzer": { "index_ngram_analyzer": { "type": "custom", "tokenizer": "keyword", "filter": [ "ngram_tokenizer", "lowercase" ] }, "search_term_analyzer": { "type": "custom", "tokenizer": "keyword", "filter": "lowercase" } } }
如何突出Soft而不是Software Development.