使用通配符突出显示的弹性搜索不能按预期工作

时间:2015-06-14 10:38:14

标签: search elasticsearch lucene highlight

我现在正在使用elasticsearch高亮显示并遇到一些问题。 这是突出显示查询:

"highlight" : {
"pre_tags" : [ "<span class=\"mark\">" ],
"post_tags" : [ "</span>" ],
"order" : "score",
"encoder" : "html",
"require_field_match" : false,
"fields" : {
  "*" : { }
}

}

我在字段中指定*因为我需要突出显示所有可能的字段,并且不想全部指定它们。 问题是,如果我使用字段查询,它还会突出显示未查询的字段, 例如,如果我查询:

Name:Macdonalds

它还将突出显示:

Name:**Macdonalds**
Description: **macdonalds** fast food...

我正在使用query_string查询,我不能将require_field_match设置为true,因为我也在所有字段中搜索免费测试,如果我将此参数设置为true,则不会突出显示任何内容......

有什么建议吗? 有人绊倒了这个问题吗?

1 个答案:

答案 0 :(得分:3)

好吧,我已成功解决了这个问题(在@Will评论之后) 明确指定要在查询中突出显示的所有字段并设置require_field_match" : true时 亮点按预期工作:) 有点奇怪...但是有效。这样就会突出显示非字符串的字段,因此请注意。

 {
      "from" : 0,
      "size" : 10,
      "query" : {
        "query_string" : {
          "query" : "some query",
          "fields" : [ "field1", "field2", ... ],
          "use_dis_max" : true
        }
      },
      "highlight" : {
        "pre_tags" : [ "<span class=\"mark\">" ],
        "post_tags" : [ "</span>" ],
        "order" : "score",
        "encoder" : "html",
        "require_field_match" : true,
        "fields" : {
          "*" : { }
        }
      }
    }