Elasticsearch 分析器的高级用法一(同义词,高亮搜索)

Elasticsearch 分析器的高级用法一(同义词,高亮搜索)

  • 同义词
    • 简介
    • 分析使用
    • 同义词案例
  • 高亮搜索
    • 高亮搜索策略
      • unified
      • plain
      • vh

同义词

简介

在搜索场景中,同义词用来处理不同的查询词,有可能是想表达相同的搜索目标。

例如:查询“北京大学”和“北大”时,其实时想搜索同一个内容。

在ES内置的分词过滤器中,有两个同义词分词过滤器(synonym 和 synonym_graph)

官网:

synonym: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/analysis-synonym-tokenfilter.html
synonym_graph: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/analysis-synonym-graph-tokenfilter.html

synonym_graph 相对于 synonym 对于多词同义词有更精确的效果

在这里插入图片描述
官方建议,在索引时使用 synonym ,在 查询时 使用 synonym_graph

分析使用

可以借助同义词过滤器实现 同义词分析器

指定同义词内容,有两种方式

  • 直接通过synonyms 指定,同义词用 , 分割
# synonym
POST _analyze
{"tokenizer": "ik_smart","filter": {"type": "synonym","synonyms": ["北京大学, 北大"]},"text": "北京大学"
}
  • 通过文件方式指定 同义词
  1. 在 es/config 目录下 创建文件 analysis/synonym.txt
    在这里插入图片描述
  2. 在 synonym.txt 中编辑同义词内容
# 通过文件方式指定同义词
POST _analyze
{"tokenizer": "ik_smart","filter": {"type": "synonym","synonyms_path": "analysis/synonym.txt"},"text": "北京大学"
}

上述两种请求方式,结果相同,如下:

在这里插入图片描述
从结果可以看出,北京大学 和 北大 都被当做同义词分析。

同义词案例

案例要求:通过大学简称或全称都能搜索到对应大学的内容

  1. 创建大学索引

    # 创建一个索引
    # 包含一个text字段,索引分析器为 ik_smart
    # 搜索分析器为自定义的 同义词分析器,同义词内容在analysis/synonym.txt 中
    #  "updateable": true  表示允许动态修改同义词
    PUT /college
    {"settings": {"index": {"analysis": {"analyzer": {"my_synonyms": {"tokenizer": "ik_smart","filter": [ "synonym" ]}},"filter": {"synonym": {"type": "synonym_graph","synonyms_path": "analysis/synonym.txt",  "updateable": true                        }}}}},"mappings": {"properties": {"name": {"type": "text","analyzer": "ik_smart","search_analyzer": "my_synonyms"              }}}
    }
    
  2. 指定同义词
    在 analysis/synonym.txt 文件中 写入同义词 ”北京大学,北大“

    在这里插入图片描述

  3. 初始化数据

    POST /college/_bulk
    {"index":{}}
    {"content":"北大,国内最高学府"}
    {"index":{}}
    {"content":"北外,中华人民共和国教育部直属的全国重点大学,211"}
    
  4. 测试搜索

    GET /college/_search
    {"query": {"match": {"content": "北京大学"}}
    }	
    

    在这里插入图片描述

  5. 修改同义词文件

    上述同义词文件中,没有指定 北外 和 北京外国语。所以直接搜索北京外国语大学是没有结果的。

    这时,我们需要动态的添加新的 同义词。
    ES官方提供了 修改分析器资源的 API POST /{index}/_reload_search_analyzers
    并要求必须指定"updateable": true

    我在创建索引时 ,已经指定了 "updateable": true,这里可以直接修改 synonym.txt 文件

    a. 添加 同义词

    echo 北京外国语大学,北外,北京外国语 >> synonym.txt
    

    在这里插入图片描述

    b. 发送请求 重新加载分析器资源

    POST /college/_reload_search_analyzers
    
  6. 测试搜索

    GET /college/_search
    {"query": {"match": {"content": "北京外国语大学"}}
    }
    

    在这里插入图片描述

高亮搜索

“高亮显示”的英文为highlight,是指在搜索结果中通过对文档标题的部分匹配字符串进行颜色(如红色)或者字体(如加粗)等处理,在视觉呈现上使匹配的字符串与未匹配的字符串有明显的区分效果。

ES 提供了高亮搜索功能

下面搜索content 字段,并对搜索内容进行高亮显示

PUT /light
{"mappings": {"properties": {"content":{"type":"text"}}}
}POST /light/_bulk
{"index":{}}
{"content":"北京大学,国内最高学府,211,985"}
{"index":{}}
{"content":"北京,中国首都,帝都"}GET /light/_search
{"_source": "content","query": {"match": {"content": "北京"}},"highlight": {"fields": {"content": {// 设定 高亮搜索策略,默认是unified"type":"plain",// 设定 高亮标签,默认是<em></em>"pre_tags": "<hight>","post_tags": "</hight>"}}}
}

在这里插入图片描述

高亮搜索策略

ES支持的高亮显示搜索策略有plain、unified和fvh,用户可以根据搜索场景进行选择。

unified

默认策略

unified策略是由Lucene Unified Highlighter来实现的,其使用BM25(Best Match25)算法进行匹配

plain

plain是精准度比较高的策略,因此它必须将文档全部加载到内存中,并重新执行查询分析。由此可见,plain策略在处理大量文档或者大文本的索引进行多字段高亮显示搜索时耗费的资源比较严重。因此plain策略适合在单个字段上进行简单的高亮显示搜索。

vh

为了弥补上述两种策略在大文本索引高亮显示搜索时的速度低问题,Lucene还提供了基于向量的高亮显示搜索策略fvh(fast vector highlighter)。fvh策略更适合在文档中包含大字段的情况(如超过1MB)下使用,如果计算机的I/O性能更好(如使用SSD),则fvh策略在速度上的优势更加明显。

如果要使用fvh策略进行高亮显示搜索,需要设定字段的 term_vector属性值为with positions offsets

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Go实现的分布式主键系统

基于Go实现的分布式主键系统 摘要 随着互联网的发展&#xff0c;微服务得到了快速的发展&#xff0c;在微服务架构下&#xff0c;分布式主键开始变得越来越重要。目前分布式主键的实现方式颇多&#xff0c;有基于数据库自增的、基于UUID的、基于Redis自增的、基于数据库号段的…

探寻最强性能云电脑:ToDesk云电脑、无影云、网易云游戏、易腾云横测大比拼

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

恶劣天候鲁棒三维目标检测论文整理

恶劣天候鲁棒三维目标检测论文整理 Sunshine to Rainstorm: Cross-Weather Knowledge Distillation for Robust 3D Object DetectionRobo3D: Towards Robust and Reliable 3D Perception against CorruptionsLossDistillNet: 3D Object Detection in Point Cloud Under Harsh W…

虚拟设备和物理平台之间的资源分配

虚拟设备和物理平台之间的资源分配 在物理硬件设备平台上通过虚拟机&#xff08;VM&#xff09;或其他虚拟化技术运行多个虚拟化设备时&#xff0c;这些虚拟化设备会消耗物理硬件资源。 虚拟化设备如何消耗资源&#xff1f; CPU 资源 虚拟机会消耗物理 CPU 的计算能力。每个虚…

基于自抗扰控制器和线性误差反馈控制律(ADRC-LSEF)的控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 ADRC原理 4.2 线性误差反馈控制律(LSEF) 4.3 ADRC-LSEF融合系统 5.完整工程文件 1.课题概述 基于自抗扰控制器和线性误差反馈控制律(ADRC-LSEF)的控制系统simulink建模与仿真。 2.系统仿真结果 …

测试驱动编程(3)进阶单元测试(下)

文章目录 测试驱动编程(3)进阶单元测试&#xff08;下&#xff09;示例实战接收同事的需求开始迭代需求故事迭代1故事迭代2故事迭代3故事迭代4故事迭代5故事迭代6 测试驱动编程(3)进阶单元测试&#xff08;下&#xff09; 示例实战 接收同事的需求 你的同事正在开发一个远程…

【PROXYCHAINS】Kali Linux 上配置NAT PROXYCHAINS保姆级教程

kali linux配置agent 在博主配置kali 的时候遇到了一些小问题&#xff0c;主要就是连接一直报错超时。 方法一&#xff1a;优点&#xff1a;免费&#xff0c;但是agent很不稳定 搜索免费ip,在Google搜索free proxy list 检查可用ip 连接成功 cd /etcls |grep redsnano reds…

IDEA中一些常见操作【持续更新】

文章目录 前言善用debugidea中debug按钮不显示自动定位文件【始终选择打开的文件】idea注释不顶格【不在行首】快速定位类的位置【找文件非常快】创建文件添加作者及时间信息快速跳转到文件顶端 底端 前言 因为这些操作偶尔操作一次&#xff0c;不用刻意记忆&#xff0c;有个印…

Gradle 基础学习(九) 认识Gradle属性和构建环境配置

Gradle提供了多种机制给开发者来配置Gradle自身的行为和具体项目的行为。 以下是使用这些机制的一些参考。 Mechanism Information Example Command line interface 命令行接口&#xff0c;用于动态配置构建行为和Gradle功能 --rerun Project properties 特定于Gradle …

Spring Cloud快速入门

Spring Cloud是一个用于构建微服务架构的开源框架&#xff0c;它基于Spring Boot&#xff0c;旨在简化分布式系统的开发。以下是Spring Cloud应用框架的快速入门步骤&#xff1a; 环境准备&#xff1a; 安装Java JDK&#xff1a;确保你的开发环境已经安装了Java JDK&#xff0c…

苹果CMS:怎么重新安装

当我们安装好苹果CMS之后苹果cms&#xff1a;介绍及安装&#xff0c;但是最好我们在安装的时候配置好对应配置后&#xff0c;备份一份&#xff0c;如果不记得哪里配置出了问题&#xff0c;出现一些不可预料的问题&#xff0c;那我们可以简单暴力的直接重新安装&#xff0c;我们…

Agency Swarm介绍:构建和管理智能代理的未来

随着人工智能技术的迅速发展&#xff0c;智能代理正在成为现实世界中不可或缺的一部分。Agency Swarm是一个由Arsenii Shatokhin&#xff08;VRSEN&#xff09;创建的开源框架&#xff0c;它简化了自定义智能代理的创建过程&#xff0c;并允许用户构建协作的代理群&#xff08;…

211初试自命题复试线仅302分!延边大学计算机考研考情分析!

延边大学&#xff08;Yanbian University&#xff09;&#xff0c;简称“延大”&#xff0c;地处吉林省延边朝鲜族自治州&#xff0c;是国家“双一流”建设高校、国家“211工程”重点建设大学、西部开发重点建设院校、吉林省人民政府和教育部共同重点支持建设大学、吉林省人民政…

计算机如何将输入文字显示出来的?渲染Image rendering

1.文字渲染的简单理解 渲染图像&#xff0c;可以理解为用cpu/gpu构造出原本不存在的图像。比如输入计算机的英文字符都是ASCII码&#xff0c;而我们在屏幕上看到显示的字符对应的应该是RGB/YUV的像素。计算机把ASCII字符转化成像素的过程就是文字渲染。又比如我们GPU用多个2D图…

Rust: 编译过程中链接器 `cc` 没有找到

这个错误信息表明在编译过程中链接器 cc 没有找到。cc 通常是 C 编译器的符号链接&#xff0c;它指向系统上的实际 C 编译器&#xff0c;如 gcc 或 clang。这个错误通常意味着你的系统缺少必要的编译工具链。 要解决这个问题&#xff0c;你需要确保你的系统上安装了 C 编译器。…

DolphinDB 携手九鞅科技,助力固收投研效能飞跃

随着金融市场开放的广度与深度不断拓宽&#xff0c;金融产品呈现出多样化的发展态势&#xff0c;其中债券投资组合凭借其低风险性、高流动性与稳健的收益表现&#xff0c;逐渐成为投资理财领域备受瞩目的焦点。投资经理不仅需要了解哪些债券值得投资&#xff0c;更要对债券投资…

neo4j、leafletjs、Cypher、celery、mysql去重、docker-compose doc

docker documentation leafletjs英文 leafletjs中文 python for neo4j第三方库neo4j Experience Neo4j on Your Desktop neo4j前端组件 neo4j中文文档&#xff08;可能补全&#xff09; Cypher 查询语法&#xff08;中文&#xff09; Deployment Center DELETE FROMtabl…

C++报错:没有与参数列表匹配的构造函数 (能确定类型是正确的)

原因&#xff1a; 构造函数定义的参数是“引用类型”&#xff0c;而你使用时&#xff0c;传入了临时变量 背景&#xff1a; 构造函数如下&#xff1a; Ray(Vector3d& p, Vector3d& d); 错误代码如下&#xff1a; Ray r1 Ray(Vector3d(0.0f,0.0f,3.0f) , Vector3…

web4.0-元宇宙虚拟现实

互联网一直在不断演变和改变我们的生活方式&#xff0c;从Web逐渐 1.0时代的静态网页到Web 2.0时代的社会性和内容制作&#xff0c;再从Web逐渐 在3.0阶段&#xff0c;互联网发展一直推动着大家时代的发展。如今&#xff0c;大家正站在互联网演化的新起点上&#xff0c;迈入Web…

Loongnix20.5系统ssh无法远程登陆问题

1. 确认客户端与服务器网络通信正常&#xff0c;能ping通。 2. 确认已启动ssh服务。 service ssh start后ssh登录正常。