没有得到ElasticSearch的任何亮点

时间:2014-01-22 14:10:50

标签: elasticsearch

我正在尝试创建一个将返回突出显示的响应的查询。我的查询是:

POST myindex/_search
{
  "from": 0,
  "size": 1,
  "query": {
    "query_string": {
      "query": "search for this"
    }
  },
  "highlight": {
    "pre_tags": [
      "<b>"
    ],
    "post_tags": [
      "</b>"
    ],
    "fields": {
      "_all": {}
    }
}}

但结果不会有任何亮点,它包含的就是这样的命中:

{
   "took": 0,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 0.2791085,
      "hits": [
         {
            "_index": "devintranett_1",
            "_type": "searchdocuments",
            "_id": "/link/ae0089b649e14de080fd94acb79bdfcd.aspx?id=1412&epslanguage=no",
            "_score": 0.2791085,
            "_source": {
               "id": "/link/ae0089b649e14de080fd94acb79bdfcd.aspx?id=1412&epslanguage=no",
               "contentType": 0,
               "location": "/link/ae0089b649e14de080fd94acb79bdfcd.aspx?id=1412&epslanguage=no",
               "ingress": "...",
               "content": "...",
               "title": "...",
               "createdDate": "2014-01-15T15:16:24",
               "changedDate": "2014-01-15T15:16:45.887"
            }
         }
      ]
   }
}

我缺少什么才能获得突出显示的结果?

更新

我想我想通了,要获得匹配查询需要的亮点,这是正确的吗?

1 个答案:

答案 0 :(得分:0)

您选择了错误的字段来突出显示。实际上,突出显示意味着需要对字段进行索引,以便可以检索其标记(以及它们的位置和偏移)。此外,需要存储该字段以便突出显示和返回。

您通常不需要单独存储字段,因为elasticsearch默认情况下始终存储_source字段。问题是您选择突出显示_all字段,该字段不属于您的文档,因此也不属于_source字段。它需要单独存储在lucene中,但默认情况下不是。

我建议切换到实际出现在文档中的字段上突出显示。事实上,鉴于_all字段包含来自文档中所有字段的内容,其内容可能不会很好地向您的用户显示。作为实验,您可以通过将_all的映射更改为"store":"yes"来配置要存储在lucene中的{{1}}字段。请记住,这会导致浪费一些磁盘空间。