简体   繁体   English

ElasticSearch高亮显示过滤查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM