花了很长时间阅读文档和各种网站。我不明白应该如何使用短语建议来影响查询的结果。我的理解是运行以下查询和建议器,建议器的结果将用于查询。
POST test/test/_search
{
"query": {
"multi_match": {
"query": "anti-inefffective",
"fields": ["*@value"]
}
},
"highlight" : {
"fields" : {
"*@value" : {
"pre_tags" : ["<mark>"],
"post_tags" : ["</mark>"]
}
}
},
"suggest" : {
"text" : "anti-inefffective"",
"simple_phrase" : {
"phrase" : {
"analyzer" : "default",
"field" : "_all",
"size" : 1,
"real_word_error_likelihood" : 0.95,
"max_errors" : 0.5,
"gram_size" : 2,
"direct_generator" : [ {
"field" : "_all",
"suggest_mode" : "always",
"min_word_length" : 1
} ],
"highlight": {
"pre_tag": "<em>",
"post_tag": "</em>"
}
}
}
}
}
如何在json请求中获取用于查询字词的建议器的结果?我见过的所有例子都在查询后执行了一句建议,这对我来说似乎很奇怪。我能看到的唯一方法是运行一个短语建议查询然后提取值,然后以编程方式将其添加到查询中,然后使用建议的文本运行查询。
换句话说,我希望能够做谷歌所做的事情,如果你在Google中输入“癌症肿瘤”,它会返回“癌症肿瘤”的结果,但是你可以选择使用不正确的短语,但更正后的短语是自动用于查询。
答案 0 :(得分:4)
与collate
参数一起使用时,您应该查看词组建议器的query
+ confidence
选项。
短语建议工作流程如下所示:
建议基于cancerous
和tummour
的候选词条
传递给候选生成器部分的参数。
生成一些“疯狂的人”。使用该术语的短语建议 候选人,将短语术语的词频结合起来 为每个建议生成一个分数。
使用整理/匹配选项,实际运行每个候选人 在查询模板内部(由您,查询作者定义)所以 可以丢弃具有零结果的查询。
要模拟您描述的Google功能,当您运行用户的查询时,您还要:
使用短语suggester为原始用户输入查询生成#1 "size": 1
,得分最高,整理/非零结果短语建议。
使用默认"confidence": 1.0
,短语建议器只会为您提供建议者认为与原始用户输入查询相比具有更高置信度的短语建议。
当您看到(较高置信度)建议与原始查询结果一起返回时,您的客户可以决定 接受建议 并执行建议查询代替原始查询(同时保留原始查询文本以显示为后备搜索选项)。
简短回答:无法自动使用Elasticsearch中的热门建议作为查询文本。但是您可以使用短语suggester当前提供的功能在您的搜索客户端中构建它。