我希望突出显示匹配的结果。如果我提到字段名称并且它返回突出显示的文本,这对我有用,但是如果我将字段指定为“_all”,则它不返回任何值。 这对我有用:
curl -XGET "http://localhost:9200/my_index/my_type/_search?q=stackoverflow&size=999" -d '{
"highlight":{
"fields":{
"my_field":{}
}
}
}'
返回预期值,如下所示: [highlight] => stdClass对象([my_field] =>数组([0] => stackoverflow 是技术人员的最佳网站))
但是当我这样说时:
curl -XGET "http://localhost:9200/my_index/my_type/_search?q=stackoverflow&size=999" -d '{
"highlight":{
"fields":{
"_all":{}
}
}
}'
我得到空值/没有结果。
[highlight] => stdClass Object ( [_all] => Array () )
如何让它在任何字段上工作,以便我不必提及字段名称?
答案 0 :(得分:27)
_all
作为存储字段另一种快速解决方法:使用*
代替_all
:
curl -XGET "http://localhost:9200/my_index/my_type/_search?q=stackoverflow&size=999" -d '{
"highlight":{
"fields":{
"*":{}
}
}
}'
答案 1 :(得分:16)
如果您使用的是ES 2.x
,那么由于changes made,您需要将require_field_match
选项设置为false
,来自文档
require_field_match选项的默认值已从false更改为true,这意味着默认情况下,荧光笔只会将查询的字段考虑在内。
这意味着,在查询_all字段时,尝试突出显示 除_all之外的任何字段都不会产生突出显示的片段。
"highlight": {
"fields": {
"*": {}
},
"require_field_match": false
}
答案 2 :(得分:5)
您需要将_all字段映射为已存储。下面的映射应该可以解决问题。请注意,这将添加到索引大小。
{
"my_type": {
"_all": {
"enabled": true,
"store": "yes"
}
}}
答案 3 :(得分:-1)
此库具有查询突出显示功能,包括突出显示所有字段。 README解释了如何使用_all字段存储等创建弹性搜索索引: https://github.com/niranjan-uma-shankar/Elasticsearch-PHP-class