微信登录

搜索语句_search - 高亮语句 - highlight

Elasticsearch的高亮简介

Elasticsearch的高亮(highlight)功能可以在搜索结果中突出显示与查询条件匹配的文本片段。这使得用户可以快速识别文档中与搜索词相关的部分。以下是一些关于Elasticsearch高亮查询的基本操作和参数配置:

  1. 高亮参数:Elasticsearch提供了多个高亮参数,包括fields(指定高亮字段)、pre_tagspost_tags(定义用于高亮文本的HTML标签,默认为<em></em>)、fragment_size(高亮片段大小,默认为100字符)、number_of_fragments(返回片段的最大数量,默认为5)等。

  2. 自定义高亮片段:通过在高亮属性中为需要高亮的字段设置pre_tagspost_tags,可以使用自定义HTML标签来高亮关键词。例如,可以使用<strong>标签将关键词高亮显示为加粗。

  3. 多字段高亮:如果希望在搜索一个字段时,其他字段中的匹配项也能被高亮显示,可以设置require_field_match属性为false。这样,即使查询不直接针对某个字段,该字段中的匹配项也会被高亮。

  4. 高亮器类型:Elasticsearch提供了三种高亮器,包括默认的unified高亮器、posting高亮器和fvh(fast-vector-highlighter)高亮器。posting高亮器不需要二次分析,但需要在字段映射中设置index_optionsoffsets来保存关键词的偏移量,而fvh高亮器使用词向量位置信息快速定位词条片段,但需要额外的索引空间。

  5. 高亮查询示例:在搜索请求中,可以在query部分定义搜索条件,在highlight部分配置高亮选项。例如,使用match查询并指定要高亮的字段,同时设置前置和后置标签来自定义高亮样式。

  6. 高亮性能分析:在选择高亮器时,需要考虑性能和存储空间。默认的高亮器虽然速度较慢,但不需要额外存储空间。postings高亮器速度较快,但需要在索引时保存偏移量。fvh高亮器虽然性能最高,但需要更多的索引空间和内存。

通过这些高亮功能,可以增强用户的搜索体验,帮助他们更快地找到所需信息。

在Elasticsearch中,使用高亮显示搜索结果的关键词,可以让用户直观地看到匹配的部分。以下是一个使用Elasticsearch高亮功能的查询示例:

假设我们有一个名为my_index的索引,里面有一个content字段,我们想要搜索这个字段中包含”Elasticsearch”这个词的文档,并且希望将匹配的部分用<strong>标签高亮显示。

Elasticsearch的高亮查询体

  1. GET /my_index/_search
  2. {
  3. "query": {
  4. "match": {
  5. "content": "Elasticsearch"
  6. }
  7. },
  8. "highlight": {
  9. "pre_tags": ["<strong>"],
  10. "post_tags": ["</strong>"],
  11. "fields": {
  12. "content": {}
  13. }
  14. }
  15. }
  • GET /my_index/_search:这是发起一个GET请求到my_index索引的搜索API。
  • query:定义了搜索的查询条件,这里使用的是match查询,它会在content字段中查找包含”Elasticsearch”的文档。
  • highlight:定义了高亮的配置。
    • pre_tagspost_tags:定义了高亮的开始和结束标签,这里设置为<strong></strong>,意味着匹配的文本会被这两个标签包围,从而在浏览器中显示为加粗。
    • fields:指定了需要高亮的字段,这里设置为content,即在content字段中匹配的文本会被高亮。

Elasticsearch会返回一个JSON对象,其中包含了搜索结果和高亮信息。例如:

  1. {
  2. "took": 1,
  3. "timed_out": false,
  4. "_shards": {
  5. "total": 5,
  6. "successful": 5,
  7. "skipped": 0,
  8. "failed": 0
  9. },
  10. "hits": {
  11. "total": {
  12. "value": 3,
  13. "relation": "eq"
  14. },
  15. "max_score": 2.8894475,
  16. "hits": [
  17. {
  18. "_index": "my_index",
  19. "_id": "1",
  20. "_score": 2.8894475,
  21. "_source": {
  22. "content": "Elasticsearch是一个基于Lucene的搜索引擎。"
  23. },
  24. "highlight": {
  25. "content": [
  26. "<strong>Elasticsearch</strong>是一个基于Lucene的搜索引擎。"
  27. ]
  28. }
  29. },
  30. ...
  31. ]
  32. }
  33. }

在这个返回结果中,hits数组包含了所有匹配的文档。每个文档对象中,_source字段包含了原始文档内容,而highlight字段包含了高亮后的文本片段。这样用户就可以看到文档中哪些部分与他们的搜索词匹配。

查询语句增加高亮<tag1><tag2>

  1. GET test/_search
  2. {
  3. "query" : { "term" : { "content" : "中国" }},
  4. "highlight" : {
  5. "pre_tags" : ["<tag1>", "<tag2>"],
  6. "post_tags" : ["</tag1>", "</tag2>"],
  7. "fields" : {
  8. "content" : {}
  9. }
  10. }
  11. }
搜索语句_search - 高亮语句 - highlight