ES分词导致查询结果不准确

news2024/9/21 11:40:58

问题现象

索引里面有数据,而没有查询出来。

如下图所示,术语库(索引)中里面有一条数据的原文是“层”,而根据完整的原文来查询该原文中的术语,并未将该术语查询出来。

根据原文查询该原文中的术语,并未查询到上面的术语:

原因分析

这是由于es分词器导致的。由于es在执行查询时,会先将原文进行分词,再将分词后的结果拿去匹配。

查看分词结果:

由于待查询的字段采用的分词器是optimizeIK,所以这里使用该分词器查询原文分词后的结果

分词结果:

由于分词结果并没有“层”这条数据,所以也不会匹配出“层”这条术语。

解决方案

两种解决方案,分别是增加自定义词库和查询前分词

增加自定义词库

也就是自定义一个词库,让es遇到自定义词库中的词时也进行分词。比如将上述的“层”加入自定义词库当中,如何es分词时则会将“层”给分词出来。这需要改动es的配置文件IKAnalyzer.cfg.xml,修改文件里面的扩展配置指向自定义词库。

这种方案的缺点是不能一次性解决该问题,因为需要遇到此问题时,才能将未查询到的词组加入自定义词库,而且需要重启es,会影响线上功能。

查询前分词

所谓查询前分词,也就是不直接使用原文进行查询,而是先将原文通过多个分词器进行分词,再使用分词后的结果进行查询。比如将原文分别进行standard分词器分词和optimizeIK分词器分词,将两种分词器的分词结果进行合并,然后再进行查询。

先分词:

使用分词后的结果进行匹配:

es命令:

GET /tb/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "dbId": [
              "19841159f25845008fad2512aa91f48b"
            ]
          }
        }
      ],
      "should": [
        {
          "match_phrase": {
            "original": "侏"
          }
        },
        {
          "match_phrase": {
            "original": "罗"
          }
        }
        ....
      ],
      "minimum_should_match": 1, 
      "filter": [
        {
          "script": {
            "script": {
              "lang": "painless",
              "source": "String str = params.val;String strLower = params.valLower;String val = doc['original.keyword'].value;return str.contains(val) || strLower.contains(val.toLowerCase());",
              "params": {
                "val": "侏罗层系主力区块年注采比变化",
                "valLower": "侏罗层系主力区块年注采比变化"
              }
            }
          }
        }
      ]
    }
  }
}

缺点是如果分词结果太多,会比较消耗性能

目前是采用第二种方案来解决该问题的。

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

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

相关文章

FreeRTOS学习——接口宏portmacro.h

FreeRTOS学习——接口宏portmacro.h,仅用于记录自己阅读与学习源码 FreeRTOS Kernel V10.5.1 portmacro版本:GCC/ARM_CM7 portmacro.h是什么 portmacro.h头文件,用于定义与特定硬件平台相关的数据类型和常量。 在移植过程中,…

VulhubDC-4靶机详解

项目地址 https://download.vulnhub.com/dc/DC-4.zip实验过程 将下载好的靶机导入到VMware中,设置网络模式为NAT模式,然后开启靶机虚拟机 使用nmap进行主机发现,获取靶机IP地址 nmap 192.168.47.1-254根据对比可知DC-4的一个ip地址为192.1…

无人机光电吊舱的技术!!

1. 成像技术 可见光成像:通过高分辨率相机捕捉地面或空中目标的清晰图像,提供直观的视觉信息。 红外热成像:利用红外辐射探测目标的温度分布,实现夜间或恶劣天气条件下的隐蔽目标发现。 多光谱成像:通过不同波段的光…

日用百货小程序如何渠道经营开店

将货更多的卖出去是每位商家的心声,日用百货商家手中的货具备多样性,挑选的用户也多,由于货单价较低,因此不断获客并其多买/复购/留存/裂变等是长期发展的关键点。 如何获得更多经营渠道,线上找寻出路是方法之一&…

ROS和ROS2借助智能大模型的学习和研究方法

机器人相关知识的本身和价值-CSDN博客 知识本身在智能时代毫无价值,需要基于知识应用和创新才有价值。 学历报废并非来自扩招,而是智能模型的快速发展。-CSDN blink-领先的开发者技术社区 2024年中秋,智能模型实力已经如此,但还…

智算筑基,九章云极DataCanvas公司闪耀2024年服贸会

9月12日,2024年中国国际服务贸易交易会(以下简称“服贸会”)在北京隆重开幕,九章云极DataCanvas公司携AI智算产品系列深度参展本届服贸会,为观众奉上技术与应用深度融合的参展盛宴。 本届服贸会由中华人民共和国商务部…

文心一言 VS 讯飞星火 VS chatgpt (349)-- 算法导论23.2 8题

八、Borden教授提出了一个新的分治算法来计算最小生成树。该算法的原理如下:给定图 G ( V , E ) G(V,E) G(V,E),将 V V V划分为两个集合 V 1 V_1 V1​和 V 2 V_2 V2​,使得 ∣ V 1 ∣ |V_1| ∣V1​∣和 ∣ V 2 ∣ |V_2| ∣V2​∣的差最多为1。设 E 1 E_…

2.使用 VSCode 过程中的英语积累 - Edit 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂,各种生活的元素也都可以做为我们的学习对象,本文将利用 VSCode 页面上的各种英文元素来做英语的积累,如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的,借此做英语积累再合适不过&a…

【每日刷题】Day124

【每日刷题】Day124 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. LCR 079. 子集 - 力扣(LeetCode) 2. 1863. 找出所有子集的异或总和再求和 …

超详细超实用!!!零基础java开发之云风笔记接口开发之删除笔记(十一)

云风网 云风笔记 云风知识库 一、service/NoteApi新增delNode接口定义 public interface NoteApi {...int deleteNote(NoteManage noteManage); }二、service/impl/NoteServiceImpl接口实现逻辑 public class NoteServiceImpl implements NoteApi {AutowiredNoteMapper note…

LVM硬盘挂载

LVM硬盘挂载 一、基础概念 sda/sdb/nvme0n1/nvme0n2: 硬盘的命名方式,中括号的字母为第三位按不同硬盘的加载顺序排序。sda1/sda2/sdb1: 第4位为分区号,数字为不同分区的依序命名lvm: LVM是一种逻辑卷管理器,允许管理…

springboot实战学习笔记(2)

目录 1、手动创建springboot工程,选择Maven构建。 2、Maven生成的,可能需要再main目录下new一个resources目录,再在其下目录new一个配置文件。 3、 pom文件中让当前的工程继承父工程依赖:、删去无用依赖。 4、引入后端环境所需要的…

STL,智能指针和线程安全,线程安全的单例模式和懒汉饿汉的实现,以及读者写者问题

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 📚STL,智能指针和线程安全 📕STL中的容器是否是线程安全的?💡智能指针是否是线程安全…

【C语言零基础入门篇 - 7】:拆解函数的奥秘:定义、声明、变量,传递须知,嵌套玩转,递归惊艳

文章目录 函数函数的定义与声明局部变量和全局变量、静态变量静态变量和动态变量函数的值传递函数参数的地址传值 函数的嵌套使用函数的递归调用 函数 函数的定义与声明 函数的概念:函数是C语言项目的基本组成单位。实现一个功能可以封装一个函数来实现。定义函数的…

图片转PDF技巧揭秘:四款高效工具推荐!

在数字化办公和学习的今天,将图片或其他文件格式转换为PDF已成为一种常见需求。以下是几款推荐的转换工具,它们各自具有独特的功能和使用体验,可帮助大家轻松实现图片转PDF及其他PDF相关操作。 福昕PDF转换大师(365客户端&#x…

关于 Qt运行加载内存较大崩溃添加扩大运行内存 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142341544 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

【重学 MySQL】三十三、流程控制函数

【重学 MySQL】三十三、流程控制函数 IF函数IFNULL函数CASE函数总结 在MySQL中,流程控制函数是用于在SQL查询、存储过程或函数中根据特定条件执行不同流程的重要工具。这些函数可以帮助我们实现复杂的逻辑判断和数据转换。 IF函数 IF函数是MySQL中最基本的流程控制…

泛微E-Mobile client/cdnfile 任意文件读取漏洞复现

0x01 产品简介 泛微E-Mobile是一款由泛微网络科技股份有限公司开发的移动办公产品,该产品专门为手机、平板电脑等移动终端用户设计,旨在提供便捷、高效的移动办公体验。适用于企业高管和有移动办公需求的业务部相关员工使用,特别适合于已有内部OA系统的大中型企业机构,尤其…

算法-排序算法(冒泡选择插入希尔快速归并堆)

1.算法概述 1.1什么是算法 算法是特定问题的求解步骤的描述,是独立存在的一种解决问题的思想和方法。对于算法而言计算机编程语言并不重要,可以用任何计算机编程语言来编写算法。 程序数据结构算法 1.2数据结构和算法的区别和联系 数据结构只是静态…

闲置物品交易系统小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,卖家管理,广场管理,商品类型管理,商品信息管理,系统管理 微信端账号功能包括:系统首页,广场,商…