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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WIFI国家码设置的影响

记录下工作中关于国家码设置对WIFI的影响&#xff0c;以SKYLAB的SKW99和SDZ202模组为例进行说明。对应到日常&#xff0c;就是我们经常提及手机是“美版”“港版”等&#xff0c;它们的wifi国家码是不同的&#xff0c;各版本在wifi使用中遇到的各种情况与下面所述是吻合的。 现…

桶排序和基数排序

前言&#xff1a; 这篇文章&#xff0c;我们就来了解一些鲜为人知的排序&#xff0c;桶排序和基数排序。 桶排序&#xff1a; 桶排序的思想&#xff1a; 桶排序的思想就是把待排序的数尽量均匀地放到各个桶中&#xff0c;再对各个桶进行局部的排序&#xff0c;最后再按序将各…

数据结构~~链式二叉树

目录 一、基本概念 链式存储概念 二、链式二叉树的结构 链式二叉树结构 构建链式二叉树 二叉树的遍历 二叉树节点和高度等 二叉树销毁 三、链式二叉树的练习 相同的树 对称二叉树 另外一颗子树 二叉树前序遍历 二叉树遍历 四、完整代码 Tree.h Tree.c 五、总结 一…

如何恢复未保存/误删除的Excel文档?

想象一下&#xff0c;您已经在一个非常重要的 Excel 上工作了几个小时&#xff0c;而您的计算机卡住了&#xff0c;您必须重新启动计算机。Excel 文件未保存/误删除&#xff0c;您只是因为忘记点击保存按钮而损失了数小时的工作时间。但是&#xff0c;当您意识到一小时前在 Exc…

U盘引导盘制作Rufus v4.5.2180

软件介绍 Rufus小巧实用开源免费的U盘系统启动盘制作工具和格式化U盘的小工具&#xff0c;它可以快速将ISO镜像文件制作成可引导的USB启动安装盘&#xff0c;支持Windows或Linux启动&#xff0c;堪称写入镜像速度最快的U盘系统制作工具。 软件截图 更新日志 github.com/pbat…

LeetCode:74.搜索二维矩阵

class Solution(object):def searchMatrix(self, matrix, target):M, N len(matrix), len(matrix[0])for i in range(M):for j in range(N):if matrix[i][j] target:return Truereturn False代码解释 这段代码定义了一个名为 Solution 的类&#xff0c;其中包含一个方法 sea…

HoneyTrap蜜罐系统实践操作@FreeBSD

HoneyTrap介绍 HoneyTrap是一个可扩展的开源系统&#xff0c;用于运行、监控和管理蜜罐。 HoneyTrap蜜罐系统通过在网络中部署感应节点&#xff0c;实时感知周边网络环境&#xff0c;并将感应节点的日志进行实时存储和可视化分析&#xff0c;从而实现对网络环境中威胁情况的感…

线程池,日志

所要用到的知识点&#xff1a; 多线程的创建 生产消费模型&#xff0c; 线程锁 条件变量 代码&#xff1a; 线程池日志

linux系统——top资源管理器

在linux系统中&#xff0c;有类似于windows系统中的资源管理器&#xff0c;top用于实时的监控系统的任务执行状态以及硬件配置信息 在linux中&#xff0c;输入top命令&#xff0c;可以进入相应界面&#xff0c;在此界面可以使用一些指令进行操作 如&#xff0c;输入z 可以改变…

齿轮常见故障学习笔记

大家好&#xff0c;这期咱们聊一聊齿轮常见的失效形式&#xff0c;查阅了相关的资料&#xff0c;做个笔记分享给大家&#xff0c;共同学习。 介绍 齿轮故障可能以多种方式发生。如果在设计阶段本身就尽量防止这些故障的产生&#xff0c;则可以产生改更为优化的齿轮设计。齿轮…

区块链会议投稿资讯CCF A--USENIX Security 2025 截止9.4、1.22 附录用率

会议名称&#xff1a;34th USENIX Security Symposium CCF等级&#xff1a;CCF A类学术会议 类别&#xff1a;网络与信息安全 录用率&#xff1a;2023年接收率29%&#xff0c;2024录用的区块链相关文章请查看 Symposium Topics System security Operating systems security …

springboot结合baomidou dynamic-datasource组件实现多数据源

dynamic-datasource组件实现多数据源 一、背景介绍二、 思路方案三、过程四、总结五、升华 一、背景介绍 博主最近研发的项目中由于业务需要&#xff0c;在项目中使用到多个数据源。使用到了baomidou的dynamic-datasource组件来实现访问不同的数据源。觉得挺有意思的也是进行了…

[JAVASE] 类和对象综合应用 -- 图书管理系统

目录 零. 概览 一. 抽象出图书管理系统所涉及的对象 1.1 Book 1.2 User 1.3 Operation 二. 实现 User 包中的对象 2.1 User父类 2.2 NormalUser 对象 2.3 AdminUser 对象 2.4 小总结(1) 三. 实现Book包中的对象 3.1 Book 对象 3.2 BookList 对象 四. 实现 Operation…

为什么单片机不能直接驱动继电器和电磁阀

文章是瑞生网转载&#xff0c;PDF格式文章下载&#xff1a; 为什么单片机不能直接驱动继电器和电磁阀.pdf: https://url83.ctfile.com/f/45573183-1247189072-10b6d1?p7526 (访问密码: 7526)

Vitis HLS 学习笔记--控制驱动TLP-处理deadlock

目录 1. 简介 2. 代码解析 2.1 HLS kernel代码 2.2 查看接口报告 2.3 TestBench 2.4 Dataflow 报告 3. Takeaways 4. 总结 1. 简介 本文是对《Hardware Acceleration Tutorials: FIFO Sizing for Performance and Avoiding Deadlocks》实验内容的详细解释。 首先需要…

蜜罐技术是一种什么防御技术?实现原理是什么?

前言&#xff1a;蜜罐技术的出现改变了这种被动态势&#xff0c;它通过吸引、诱骗攻击者&#xff0c;研究学习攻击者的攻击目的和攻击手段&#xff0c;从而延缓乃至阻止攻击破坏行为的发生&#xff0c;有效保护真实服务资源。 自网络诞生以来&#xff0c;攻击威胁事件层出不穷…

【数据结构(邓俊辉)学习笔记】图01——若干定义

文章目录 1. 概述1.1 邻接 关联1.2 无向 有向1.3 路径 环路 2. 邻接矩阵2.1 接口2.2 邻接矩阵 关联矩阵2.3 实例2.4 顶点和边2.5 邻接矩阵2.6 顶点静态操作2.7 边操作2.7 顶点动态操作2.8 综合评价 1. 概述 1.1 邻接 关联 相对于此前的线性以及半线性结构&#xff0c;图…

AT指令配置模块

图为用串口一发送字符串来配置AT指令模块的字符串发送格式。 后续更新接收字符串的数据处理。 利用stm32给WiFi模块发送AT指令&#xff0c;所以32的发送端连接WiFi模块的接收端&#xff0c;WiFi模块接收AT指令的返回值发送给ch340由电脑显示&#xff0c;所以WiFi模块的TX连接C…

2024年5月大语言模型论文推荐:模型优化、缩放到推理、基准测试和增强性能

前一篇文章总结了关于计算机视觉方面的论文&#xff0c;这篇文章将要总结了2024年5月发表的一些最重要的大语言模型的论文。这些论文涵盖了塑造下一代语言模型的各种主题&#xff0c;从模型优化和缩放到推理、基准测试和增强性能。 大型语言模型(llm)发展迅速&#xff0c;跟上…

0元入驻抖音小店,真的是好事吗?

大家好&#xff0c;我是喷火龙。 抖音小店去年推出0元入驻抖音小店个人店的政策&#xff0c;简而言之就是只要一张身份证就可以开店&#xff0c;不需要营业执照&#xff0c;也不需要交保证金。 很多人一听很心动&#xff0c;因为没有任何成本就可以开店&#xff0c;于是纷纷跑…