Elasticsearch突出显示多个查询无法按预期工作

时间:2017-06-19 03:05:45

标签: elasticsearch

这里我有2个数据放入elasticsearch

PUT /a/b/1
{
   "message": "a b"
}

PUT /a/b/2
{
   "message": "b c"
}

然后,我尝试使用此查询获取数据

GET /a/b/_search
{
  "from": 0,
  "highlight": {
    "fields": {
      "message": {}
    }
  },
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "_name": "query_1",
            "default_operator": "AND",
            "fields": [
              "message"
            ],
            "query": "a"
          }
        },
        {
          "query_string": {
            "_name": "query_2",
            "default_operator": "AND",
            "fields": [
              "message"
            ],
            "query": "b AND c"
          }
        }
      ]
    }
  }
}

我的预期是,elasticsearch应突出显示数据ID 1 的“a”,因为它与 query_1 匹配,但不应突出显示“b”in数据ID 1 ,因为只要邮件包含“c”,我们就会选择“b”

这就是我的预期

"<em>a</em> b"

我实际上得到了什么

"<em>a</em> <em>b</em>"

无论如何我能达到我的预期吗?

1 个答案:

答案 0 :(得分:1)

AFAIK,这在Elasticsearch中是不可能的。它将突出显示所有匹配的术语,而不管术语属于哪个子查询。接近您需要的东西是highlight_query,但这也不起作用。我能想到的唯一选择是查询两次 - 一次使用“query_1”然后使用“query_2”,然后将结果合并到客户端中。但这样做当然会影响文档的分数。

相关问题