我有一个场景,我需要从弹性搜索中列出一堆作业。搜索主要通过关键字来完成。 (电气工程,司机等)我想创建一个反馈系统,如果用户点击某个特定的工作,相应的关键字将获得更高的权重。
到目前为止,这一切都是可行的。我面临问题,因为在我的系统中,用户可以搜索多个关键字,例如。 (司机或电气工程)。将为此构造的查询如下
{
"query" : {
"bool": {
"should": [
{
"multi_match": {
"query" : "electrical engineering",
"fields" : [
"description^1.0",
"name^1.0"
]
}
},
{
"multi_match": {
"query" : "driver",
"fields" : [
"description^1.0",
"name^1.0"
]
}
}
]
}
},
"sort" : [
{
"_score" : {
"order" : "desc"
}
}
]
}
现在在这种情况下,有没有办法,我可以将结果与特定的多匹配子句相关联,这样我就可以识别出这个结果是因为单词 driver < / strong>,这是因为 电气工程 。
如果有人有任何更好的想法,以便我可以完成我的反馈循环,请随意分享。
由于
答案 0 :(得分:0)
我在弹性搜索论坛找到了我的问题的答案,在这里张贴相同内容以帮助其他人。
弹性搜索提供了命名查询的概念,这些概念可用于为每个应用的查询指定名称,作为结果的一部分,ES将列出匹配的所有查询。例如。上面的查询可以这样写成
{
"query" : {
"bool": {
"should": [
{
"multi_match": {
"query" : "electrical engineering",
"fields" : [
"description^1.0",
"name^1.0"
],
"_name" : "firstQuery"
}
},
{
"multi_match": {
"query" : "driver",
"fields" : [
"description^1.0",
"name^1.0"
],
"_name" : "secondQuery"
}
}
]
}
},
"sort" : [
{
"_score" : {
"order" : "desc"
}
}
]
}
这将使用匹配的查询
返回结果