深入探究ES高亮

一、高亮的作用

ES高亮是一种在搜索结果中标识用户查询的关键词的方法,此功能广泛应用于搜索引擎和文本编辑器中。在搜索结果列表中,高亮文本可以帮助用户快速找到相关的信息,提高搜索效率。在文本编辑器中,高亮文本可以帮助用户识别不同的代码语言,减少错误。

二、高亮实现的两种方式

1. 基于字段高亮

基于字段高亮是指将搜索结果中匹配的关键词标记,只标记匹配的字段。可以通过设置字段映射和搜索时指定搜索字段来实现。

PUT my_index/_mapping
{
  "properties": {
    "content": {
      "type": "text",
      "analyzer": "standard"
    }
  }
}

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "fields": {
      "content": {}
    }
  }
}

2. 基于查询高亮

基于查询高亮是指将搜索结果中匹配的关键词标记,包括所有匹配的部分,不只是字段中匹配的部分。可以通过在查询中指定高亮选项来实现。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "require_field_match": false,
    "fields": {
      "content": {}
    }
  }
}

三、高亮的配置选项

1. 简单配置

可以使用默认的高亮选项,只需要在查询中添加highlight字段即可。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {}
}

2. 定制标记样式

可以通过设置pre_tags和post_tags选项来定制标记的样式。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "pre_tags": [""],
    "post_tags": [""],
    "fields": {
      "content": {}
    }
  }
}

3. 控制标记数量

可以通过设置fragment_size和number_of_fragments选项来控制每个字段的标记数量和标记的大小。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "fields": {
      "content": {
        "fragment_size": 100,
        "number_of_fragments": 3
      }
    }
  }
}

4. 针对不同字段设置不同选项

可以为不同的字段设置不同的高亮选项,只需要在highlight选项中指定每个字段的配置。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "fields": {
      "title": {"pre_tags": [""], "post_tags": [""]},
      "content": {"pre_tags": [""], "post_tags": [""], "number_of_fragments": 3}
    }
  }
}

四、高亮的性能优化

1. 使用缓存

ES高亮对于大量数据或者复杂查询非常消耗资源,可以通过禁用高亮缓存或者增加缓存大小来提高性能。

PUT my_index/_settings
{
  "index.highlight.max_analyzed_offset": 1000000,
  "index.highlight.max_phrase_window": 500
}

2. 避免不必要的高亮

可以使用pre_tags和post_tags选项来避免对不必要的字段进行高亮。

GET my_index/_search
{
  "query": {
    "match": {
      "title": "es 高亮"
    }
  },
  "highlight": {
    "fields": {
      "title": {"pre_tags": [], "post_tags": []},
      "content": {"pre_tags": [""], "post_tags": [""], "number_of_fragments": 3}
    }
  }
}

3. 压缩标记文本

可以使用encoder选项来压缩标记文本,减少网络传输的数据量。

GET my_index/_search
{
  "query": {
    "match": {
      "content": "es 高亮"
    }
  },
  "highlight": {
    "encoder": "html",
    "fields": {
      "content": {}
    }
  }
}

五、总结

ES高亮是一种强大的搜索功能,可以帮助用户快速找到相关信息。通过灵活的配置选项和性能优化,可以提高搜索效率和用户体验。

原创文章,作者:FESDF,如若转载,请注明出处:https://www.506064.com/n/334695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
FESDFFESDF
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相关推荐

  • Spark集成ES开发

    本文将介绍如何使用Spark集成ES进行数据开发和分析。 一、系统概述 Spark是一个基于内存的分布式计算系统,可以快速地处理大量数据。而ES(ElasticSearch)则是一…

    编程 2025-04-28
  • Helm部署ES CrashLoopBackOff

    如果你在使用Helm部署ES时遇到CrashLoopBackOff问题,那么本文将对这一问题进行详细解答。我们将从以下方面进行阐述: 一、问题分析与定位 在使用Helm部署ES时,…

    编程 2025-04-27
  • 深入解析Vue3 defineExpose

    Vue 3在开发过程中引入了新的API `defineExpose`。在以前的版本中,我们经常使用 `$attrs` 和` $listeners` 实现父组件与子组件之间的通信,但…

    编程 2025-04-25
  • 深入理解byte转int

    一、字节与比特 在讨论byte转int之前,我们需要了解字节和比特的概念。字节是计算机存储单位的一种,通常表示8个比特(bit),即1字节=8比特。比特是计算机中最小的数据单位,是…

    编程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什么是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一个内置小部件,它可以监测数据流(Stream)中数据的变…

    编程 2025-04-25
  • 深入探讨OpenCV版本

    OpenCV是一个用于计算机视觉应用程序的开源库。它是由英特尔公司创建的,现已由Willow Garage管理。OpenCV旨在提供一个易于使用的计算机视觉和机器学习基础架构,以实…

    编程 2025-04-25
  • 深入了解scala-maven-plugin

    一、简介 Scala-maven-plugin 是一个创造和管理 Scala 项目的maven插件,它可以自动生成基本项目结构、依赖配置、Scala文件等。使用它可以使我们专注于代…

    编程 2025-04-25
  • 深入了解LaTeX的脚注(latexfootnote)

    一、基本介绍 LaTeX作为一种排版软件,具有各种各样的功能,其中脚注(footnote)是一个十分重要的功能之一。在LaTeX中,脚注是用命令latexfootnote来实现的。…

    编程 2025-04-25
  • 深入了解Python包

    一、包的概念 Python中一个程序就是一个模块,而一个模块可以引入另一个模块,这样就形成了包。包就是有多个模块组成的一个大模块,也可以看做是一个文件夹。包可以有效地组织代码和数据…

    编程 2025-04-25
  • 深入探讨冯诺依曼原理

    一、原理概述 冯诺依曼原理,又称“存储程序控制原理”,是指计算机的程序和数据都存储在同一个存储器中,并且通过一个统一的总线来传输数据。这个原理的提出,是计算机科学发展中的重大进展,…

    编程 2025-04-25

发表回复

登录后才能评论