在_all字段上突出显示匹配的结果

Nin*_*nja 8 lucene elasticsearch

我希望突出显示匹配的结果.如果我提到字段名称并且它返回突出显示的文本,这对我有用,但是如果我将字段命名为"_all",则它不返回任何值.这对我有用:

        curl -XGET "http://localhost:9200/my_index/my_type/_search?q=stackoverflow&size=999" -d '{
        "highlight":{
                    "fields":{
                             "my_field":{}
                    }
        }
}'
Run Code Online (Sandbox Code Playgroud)

这将返回预期值,如下所示:[highlight] => stdClass对象([my_field] =>数组([0] => stackoverflow是技术人员的最佳网站))

但是,当我这样说:

        curl -XGET "http://localhost:9200/my_index/my_type/_search?q=stackoverflow&size=999" -d '{
        "highlight":{
                    "fields":{
                             "_all":{}
                    }
        }
}'
Run Code Online (Sandbox Code Playgroud)

我得到空值/没有结果.

[highlight] => stdClass Object ( [_all] => Array () )
Run Code Online (Sandbox Code Playgroud)

如何让它在任何字段上工作,以便我不必提及字段名称?

Bos*_*osh 27

避免需要_all在索引中添加存储字段

另一种快速修复:使用*而不是_all:

curl -XGET "http://localhost:9200/my_index/my_type/_search?q=stackoverflow&size=999" -d '{
  "highlight":{
    "fields":{
      "*":{}
    }
  }
}'
Run Code Online (Sandbox Code Playgroud)


Chi*_*h25 16

如果您正在使用,ES 2.x那么您需要设置require_field_match选项,false因为所做的更改,来自文档

require_field_match选项的默认值已从false更改为true,这意味着默认情况下,荧光笔仅会将查询的字段考虑在内.

这意味着,在查询_all字段时,尝试在_all以外的任何字段上突出显示将不会生成突出显示的片段.

"highlight": {
    "fields": {
      "*": {}
    },
    "require_field_match": false
 }
Run Code Online (Sandbox Code Playgroud)


小智 5

您需要将_all字段映射为已存储.下面的映射应该可以解决问题.请注意,这将添加到索引大小.

{
  "my_type": {
      "_all": {
        "enabled": true,
        "store": "yes"
      }
  }}
Run Code Online (Sandbox Code Playgroud)