ElasticSearch 6.0 搜索结果高亮

2018-03-18 17:54:10
1220次阅读
0个评论
高亮显示需要一个字段的实际内容。 如果该字段没有被存储(映射mapping没有将存储设置为 true),则加载实际的_source,并从_source中提取相关的字段。

注:_all字段不能从_source中提取,因此只能用于高亮显示是否明确存储。


1.默认高亮
【例子】使用默认高亮显示来获取每个搜索命中title字段的高亮显示,在指定title字段的查询请求中包含高亮显示对象。

GET website/_search
{
    "query" : {
        "match": { "title": "yum" }
    },
    "highlight" : {
        "fields" : {
            "title" : {}
        }
    }
}
2.自定义高亮标签
定义高亮可以通过pre_tags和post_tags设置


GET website/_search
{
    "query" : {
        "match": { "title": "yum" }
    },
    "highlight" : {
        "fields" : {
            "title" : {
              "pre_tags":["<B>"],
              "post_tags":["</B>"]
            }
        }
    }
}


3.多字段高亮
我们希望搜索title字段时,除了title字段中匹配关键字高亮,摘要abstract字段对应的关键字也要高亮,这需要对require_field_match属性进行设置。

默认情况下,只有包含查询匹配的字段才会突出显示。 因为默认require_field_match值为true,可以设置为false以突出显示所有字段。

【例子】title和abstract字段高亮

GET website/_search
{
    "query" : {
        "match": { "title": "yum" }
    },
    "highlight" : {
        "require_field_match":false,
        "fields" : {
            "title" : {},
            "abstract" : {}
        }
    }
}

Elasticsearch支持三个高亮器:unified,plain和fvh(快速向量高亮器)。 您可以指定要为每个字段使用的高亮器类型。


(1)Unified高亮器 
unified高亮器使用Lucene统一高亮器。 这个高亮器将文本分解为句子,并使用BM25算法对单个句子进行评分,就好像它们是文集中的文档一样。 它还支持准确的短语和多项(模糊,前缀,正则表达式)突出显示。 这是默认的高亮器。

(2)Plain高亮器 
plain高亮器使用标准的Lucene高亮器。 它试图在短语查询中理解单词重要性和任何单词定位标准来反映查询匹配逻辑。

(3)fvh高亮器 
fvh高亮器使用Lucene Fast Vector高亮器。此高亮器可用于在映射中将term_vector设置为with_positions_offsets的字段。 快速向量高亮器:

可以使用boundary_scanner进行自定义。
需要将term_vector设置为with_positions_offsets,这会增加索引的大小
可以将来自多个字段的匹配组合成一个结果。 请参阅matched_fields
可以为不同的位置上的匹配分配不同的权重,从而允许在突出显示提高词条匹配的term匹配


【例子】设置高亮类型 
type字段允许强制设定的高亮器类型。允许的值是:unified, plain和fvh。 下面是一个强制使用plain高亮器的例子

GET website/_search
{
    "query" : {
        "match": { "title": "yum" }
    },
    "highlight" : {
        "fields" : {
            "comment" : {"type" : "plain"}
        }
    }
}
这是一个设置comment字段使用fvh高亮器的例子,通过term_vectors进行设置,这会导致索引变大。



PUT /example
{
  "mappings": {
    "doc" : {
      "properties": {
        "comment" : {
          "type": "text",
          "term_vector" : "with_positions_offsets"
        }
      }
    }
  }
}


收藏00

登录 后评论。没有帐号? 注册 一个。