弹性搜索结果的反馈循环

时间:2017-03-01 04:52:11

标签: elasticsearch

我有一个场景,我需要从弹性搜索中列出一堆作业。搜索主要通过关键字来完成。 (电气工程,司机等)我想创建一个反馈系统,如果用户点击某个特定的工作,相应的关键字将获得更高的权重。

到目前为止,这一切都是可行的。我面临问题,因为在我的系统中,用户可以搜索多个关键字,例如。 (司机或电气工程)。将为此构造的查询如下

{
  "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>,这是因为 电气工程

如果有人有任何更好的想法,以便我可以完成我的反馈循环,请随意分享。

由于

1 个答案:

答案 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"
      }
    }
  ]
}

这将使用匹配的查询

返回结果