我是词组建议者的新手,并且一直在阅读文档。完成建议者可以添加权重,以便对结果进行评分。除非我想念,否则建议者这个短语没有这种选择。我有:
POST test/_search { "suggest": { "text": "noble prize", "simple_phrase": { "phrase": { "field": "title.trigram", "size": 1, "gram_size": 3, "direct_generator": [ { "field": "title.trigram", "suggest_mode": "always" } ], "highlight": { "pre_tag": "<em>", "post_tag": "</em>" } } } } }
我想使一些建议更重要或更不重要,和/或排除一些建议。上面的图片带有“诺贝尔奖”,但我想排除该建议或手动将其重要性降低。那可能吗?
该示例直接来自此处找到的第一个示例
编辑由于我的用户传递的所有短语都保存在elasticsearch中,因此上面的代码不会建议使用更好的短语。例如,如果“贵族奖”和“诺贝尔奖”都在索引中,并且用户类型为“贵族奖”,我想建议“诺贝尔奖”,但不会。大多数用户正确输入诺贝尔奖,因此每次使用查询时我都可以增加,因此建议正确。有道理。
另一个编辑:奇怪的是,他们认为您的索引不会增长,并且您不想像完成建议程序允许您那样对短语进行优先排序。
一个完整的例子:
PUT test { "settings": { "index": { "number_of_shards": 1, "analysis": { "analyzer": { "trigram": { "type": "custom", "tokenizer": "standard", "filter": ["standard", "shingle"] }, "reverse": { "type": "custom", "tokenizer": "standard", "filter": ["standard", "reverse"] } }, "filter": { "shingle": { "type": "shingle", "min_shingle_size": 2, "max_shingle_size": 3 } } } } }, "mappings": { "test": { "properties": { "title": { "type": "text", "fields": { "trigram": { "type": "text", "analyzer": "trigram" }, "reverse": { "type": "text", "analyzer": "reverse" } } } } } } } POST test/test {"title": "noble prize", "weight": 1} POST test/test {"title": "nobel prize", "weight": 2}
查询:
GET /test/_search { "suggest": { "text": "noble prize", "simple_phrase": { "phrase": { "field": "title.trigram", "size": 1, "gram_size": 3, "direct_generator": [ { "field": "title.trigram", "suggest_mode": "always" } ], "collate": { "query": { "inline": { "match": { "title": "{{suggestion}}" } } }, "prune": true }, "highlight": { "pre_tag": "<em>", "post_tag": "</em>" } } } } }
结果(错误地)获得“贵族奖”:
{ "took": 2, "timed_out": false, "_shards": { "total": 1, "successful": 1, "failed": 0 }, "hits": { "total": 0, "max_score": 0, "hits": [] }, "suggest": { "simple_phrase": [ { "text": "noble prize", "offset": 0, "length": 11, "options": [] } ] } }
您要实现哪些功能?Did You Mean还是Autocomplete?在这种情况下,我可以给您其他建议。
Did You Mean
Autocomplete
要修剪您的建议结果,可以这样使用collate:
collate
{ "suggest": { "text": "iphon", "simple_phrase": { "phrase": { "field": "title.trigram", "size": 1, "gram_size": 3, "direct_generator": [ { "field": "title.trigram", "suggest_mode": "always" } ], "collate": { "query": { "inline": { "match": { "title": "{{suggestion}}" } } }, "prune": true }, "highlight": { "pre_tag": "<em>", "post_tag": "</em>" } } } } }
在结果中,您将看到一个"collate_match": true/false表示是否有任何建议与您的归类查询匹配的结果。
"collate_match": true/false