ElasticSearch:突出显示短语查询中的每个单词

时间:2016-01-06 22:09:59

标签: elasticsearch

如何让弹性搜索仅突出显示导致文档返回的单词?

我有以下索引

{
  "mappings": {
    "document": {
      "properties": {
        "content": {
          "type": "string",
          "fields": {
            "english": {
              "type": "string",
              "analyzer": "english"
            }
          }
        }
      }
    }
  }
}

假设我已编入索引:

  

核能是利用释放核的核反应   能量[5]产生热量,然后最常用于产生热量   蒸汽轮机在核电站发电。该   术语包括核裂变,核衰变和核聚变。   目前,act系列中的元素核裂变   周期表产生了绝大多数的核能   主要是以核衰变过程为人类提供直接服务   以地热能和放射性同位素热电的形式   发电机,利基用于弥补其余部分。

寻找“核元素”~2

我只想强调“元素的核裂变”或“元素的核裂变”的一部分,但现在每一次核的出现都会突显出来。

如果有帮助,这是我的查询:

{
  "fields": [
  ],
  "query": {
    "query_string": {
      "query": "\"nuclear elements\"~2",
      "fields": [
        "content.english"
      ]
    }
  },
  "highlight": {
    "pre_tags": [
      "<em class='h'>"
    ],
    "post_tags": [
      "</em>"
    ],
    "fragment_size": 500,
    "number_of_fragments": 20,
    "fields": {
      "content.english": {}
    }
  }
} 

1 个答案:

答案 0 :(得分:2)

ES 2.1中有一个highlighting bug,这是由this change引起的。这已由Pull Request修复。

根据ES开发人员的说法

  

这是我在#13239中介绍的一个错误   差异是由于Lucene的变化:extractUnknownQuery也是   当跨度提取已经成功时调用,所以我们应该只是下降   如果尚未提取任何跨度,则返回Weight.extractTerms。

它适用于旧版本,直到2.0版本,并且将在未来版本中按预期工作。