[英]ElasticSearch highlight with filter query
I have the following query, but highlight is not working. 我有以下查询,但突出显示不起作用。
{
"query": {
"filtered" : {
"filter" : {
"or" : {
"filters" : [
{
"query": {
"multi_match":{
"query":"time",
"fields":[
"display_name_en","display_name_pa","display_name_pr",
"icon_class","in_sidemenu","model_name","name",
"table_name"
],
"operator":"OR"
}
}
},
{
"terms":{
"created_by.id":["11","13","14","16"],
"_name" : "created_by"
}
},
{
"range":{
"created_at":{
"gte":"2016-01-27",
"lte":"2016-03-21",
"format":"YYYY-MM-dd"
}
}
}
],
"_name" : "or"
}
}
}
},
"highlight": {
"fields" : {
"name" : {}
}
}
}
And the result is like this: 结果是这样的:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "promote_kmp",
"_type": "resources",
"_id": "569e0d84684cc",
"_score": 1,
"_source": {
"id": 106,
"name": "Last time First Update",
"display_name_en": "Last time",
"display_name_pr": "Last time",
"display_name_pa": "Last time",
"table_name": "Last time",
"model_name": "Last time",
"in_sidemenu": "0",
"icon_class": "Last time",
"created_at": "2016-01-18 09:40:51",
"created_by": null,
"updated_at": "2016-01-19 14:48:44",
"updated_by": {
"id": 6,
"first_name": "Laili",
"last_name": "Hamta",
"last_activity": "2016-01-19 14:48:44",
"roles": [
{
"id": 1,
"name": "admin",
"created_at": "2015-09-06 15:19:15",
"updated_at": "2015-09-06 15:19:15",
"pivot": {
"user_id": 6,
"role_id": 1
}
}
]
}
},
"matched_queries": [
"or"
]
}
]
}
}
As you see there is no any highlight keyword inside result, So what is the mistake with this query, and why highlight is not working? 如您所见,结果中没有任何高亮关键字,那么此查询有什么错误,为什么高亮不起作用? But if I put the multi_match
part before filter:{}
it is working, and on that case how I can use with or
operator? 但是,如果我将multi_match
部分放在filter:{}
之前,那么它就可以工作,在这种情况下,如何与with or
operator一起使用? for any help thanks. 任何帮助谢谢。
The problem with query is that you are only filtering
the results, highlight
works on queries
only. 查询的问题在于您仅 filtering
结果, highlight
仅适用于queries
。 You can also notice that every document has score
of 1 because of applying only filters
. 您还可以注意到,由于仅应用了filters
,每个文档的score
均为1。 You need to rewrite your query as something like this 您需要像这样重写查询
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "time",
"fields": [
"display_name_en",
"display_name_pa",
"display_name_pr",
"icon_class",
"in_sidemenu",
"model_name",
"name",
"table_name"
]
}
},
{
"terms": {
"created_by.id": [
"11",
"13",
"14",
"16"
],
"_name": "created_by"
}
},
{
"range": {
"created_at": {
"gte": "2016-01-27",
"lte": "2016-03-21",
"format": "YYYY-MM-dd"
}
}
}
]
}
},
"highlight": {
"fields": {}
}
}
convert or filters
to bool should clause
and highlighting will work now. 将bool should clause
转换or filters
转换为bool should clause
,突出显示即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.