Elasticsearch 8.X 复杂分词搞不定,怎么办?

这篇具有很好参考价值的文章主要介绍了Elasticsearch 8.X 复杂分词搞不定,怎么办?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、实战问题

球友提问:我想停用所有纯数字的分词 ,  官网上的这个方法好像对ik分词器无效!

Elasticsearch 8.X 复杂分词搞不定,怎么办?,elasticsearch,jenkins,大数据,搜索引擎,全文检索

有没有什么别的方法啊,  chart gpt 说分词可以用正则匹配   但是测试好像是不行的  我的es版本是 8.5.3。

2、进一步沟通后,得到问题最精准描述

我的查询内容可能是:"北京市海淀区清华园10栋105",ik_smart 中文分词结果为:“北京市”、“海淀区”、“清华园”、“10栋”、105。

Elasticsearch 8.X 复杂分词搞不定,怎么办?,elasticsearch,jenkins,大数据,搜索引擎,全文检索

用户期望:只想把分词后,是纯数字的排除掉。也就是说:期望最终分词结果为:“北京市”、“海淀区”、“清华园”、“10栋”。

更进一步说:10栋是个分词,用户期望检索分词结果:“10栋”。但是105的意义不大,用户期望分词阶段把类似“105”的纯数字分词单元去掉。

3、解决方案探讨

有没有现成分词器可以满足用户的需求呢?目前看,没有!

那怎么办?只能自定义分词器。咱们之前讲过,自定义分词器核心就如下图三部分组成。

Elasticsearch 8.X 复杂分词搞不定,怎么办?,elasticsearch,jenkins,大数据,搜索引擎,全文检索

三部分含义如下,结合上面的图会更好理解。

部分 含义
Character Filter 在分词之前对原始文本进行处理,例如去除 HTML 标签,或替换特定字符。
Tokenizer 定义如何将文本切分为词条或 token。例如,使用空格或标点符号将文本切分为单词。
Token Filter 对 Tokenizer 输出的词条进行进一步的处理,例如转为小写、去除停用词或添加同义词。

Character Filter 和 Token Filter 的区别如下:

它俩在 Elasticsearch 中都是文本预处理的组件,但它们的处理时机和目标略有不同:

属性 Character Filter Token Filter
处理时机 在 Tokenizer 之前 在 Tokenizer 之后
作用对象 原始字符序列 词条或 token
主要功能 预处理文本,如去除 HTML、转换特定字符 对词条进行处理,如转为小写、去除停用词、应用同义词、生成词干等
输出 修改后的字符序列 处理后的词条列表

本质区别:Character Filter 针对原始的字符级别进行处理,而 Token Filter 针对分词后的词项级别进行处理。

到此为止,再看用户的需求,期望分词后去掉“数字”。那也就是在分词后的 Token filter 处理为上乘方案。

Token filter 怎么处理呢?考虑数字级别统一处理的正则表达式,数字的正则为:“^[0-9]+$”。

^[0-9]+$ 可以被分解为几个部分来解读:

  • ^:这个符号表示匹配的起始位置。也就是说,匹配的内容必须从目标字符串的开头开始。

  • [0-9]:这是一个字符类。它匹配从 0 到 9 的任何一个数字字符。

  • +:这是一个量词。它表示前面的内容(在这里是 [0-9] 字符类)必须出现一次或多次。

  • $:这个符号表示匹配的结束位置。也就是说,匹配的内容必须直到目标字符串的结尾。

所以,整体上,这个正则表达式的含义是:字符串的开头到结尾之间只包含一到多个数字字符,并且没有其他任何字符。

例如:

  • "123" 符合该正则。

  • "0123" 也符合。

  • "abc"、"123a" 或 "a123" 都不符合。

一句话,该正则表达式基本达到用户的需求。

实际实现的时候我们发现,对应 filter 环节的:"pattern_replace-tokenfilter"过滤器。该过滤会实现字符级别的替换,我们可以将正则匹配的数字替换为某个字符,比如“”空格字符。

但,还没有达到要求,空格字符用户期望是剔除。这时候,我们又得考虑“”空格如何剔除。

查阅 filter 官方文档知道,有个“analysis-length-tokenfilter”的过滤器,将最小长度设置为1,就能过滤掉长度为0的空格字符。

自此,方案初步敲定。

4、敲定和初步验证解决方案

经过上述的讨论。我们分三步走战略。

  • step 0: 分词器依然选择 ik_smart,和用户需求高度一致。

  • step 1:找出数值数据,使用正则过滤 "pattern_replace filter” 实现。==> 正则表达式 ^[0-9]+$ 替换为特定的字符==> ""。

  • Step 2:  删除空格,借助 length filter 实现。==> lenth > 1 小范围验证一下:

GET /_analyze
{
  "tokenizer": "ik_smart",
  "filter": [
    {
      "type": "pattern_replace",
      "pattern": "^[0-9]+$",
      "replacement": ""
    },
    {
      "type": "length",
      "min": 1
    }
  ],
  "text": "11111111北京市10522222海淀区1053333清华园10栋105"
}

在将输入文本复杂化处理后,分词结果依然能达到预期。

Elasticsearch 8.X 复杂分词搞不定,怎么办?,elasticsearch,jenkins,大数据,搜索引擎,全文检索

5、实操实现自定义分词

有了前面的初步实现,自定义分词就变得容易。

DELETE my-index-20230811-000002
PUT my-index-20230811-000002
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "tokenizer": "ik_smart",
          "filter": [
            "regex_process",
            "remove_length_lower_1"
          ]
        }
      },
      "filter": {
        "regex_process": {
          "type": "pattern_replace",
          "pattern": "^[0-9]+$",
          "replacement": ""
        },
        "remove_length_lower_1": {
          "type": "length",
          "min": 1
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "address":{
        "type":"text",
        "analyzer": "my_custom_analyzer"
      }
    }
  }
}

POST my-index-20230811-000002/_analyze
{
  "text": [
    "1111北京市3333海淀区444444清华园10栋105"
  ],
  "analyzer": "my_custom_analyzer"
}

索引定义解读如下:

部分 子部分 名称 描述
Settings Analyzer my_custom_analyzer 使用的分词器: ik_smart
- 使用的过滤器: regex_process, remove_length_lower_1
Settings Filter regex_process 类型: pattern_replace
匹配全数字的模式,并替换为空字符串
Settings Filter remove_length_lower_1 类型: length
确保仅保留长度大于或等于1的词条
Mappings Properties address 类型: text
使用的分析器: my_custom_analyzer

上 述配置的主要目的是:创建一个自定义的analyzer,该analyzer可以处理中文文本,将纯数字的token替换为空,并确保分析结果中不包含空token。

最终结果如下,达到预期效果。

Elasticsearch 8.X 复杂分词搞不定,怎么办?,elasticsearch,jenkins,大数据,搜索引擎,全文检索

6、小结

当传统默认分词不能达到我们特定的、复杂的需求的时候,记得还有一招:自定义分词。

自定义分词记住三部分组成后,拆解一下复杂问题的需求,问题就会迎刃而解。

视频解读如下:

欢迎大家关注下我的视频号,不定期分享 Elasticsearch 实战进阶干货!

7、参考

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-overview.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-length-tokenfilter.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern_replace-tokenfilter.html

推荐阅读

  1. 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  2. 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单

  3. 如何系统的学习 Elasticsearch ?

  4. 2023,做点事

  5. Elasticsearch自定义分词,从一个问题说开去

  6. Elasticsearch 自定义分词同义词环节的这个细节不大好理解......

更短时间更快习得更多干货!

和全球 近2000+ Elastic 爱好者一起精进!

Elasticsearch 8.X 复杂分词搞不定,怎么办?,elasticsearch,jenkins,大数据,搜索引擎,全文检索

大模型时代,抢先一步学习进阶干货!文章来源地址https://www.toymoban.com/news/detail-646192.html

到了这里,关于Elasticsearch 8.X 复杂分词搞不定,怎么办?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Github官网进不去怎么办?Github无法访问怎么办?

    打开hosts文件,可能需要管理员权限。 win10 hosts位置:C:WindowsSystem32driversetc 在末尾新建一行,添加如下内容: 访问 http://tool.chinaz.com/dns/ ,在输入框中填写 github.com,然后点击检测按钮,会列出响应ip,如图: 选最小TTL值的IP 在hosts文件结尾输入: 执行 ipconfig /flushdns 刷新

    2024年02月10日
    浏览(56)
  • 手机照片误删怎么办,电脑照片误删怎么办怎么才能找回,EasyRecovery来帮您

    手机照片误删怎么办,电脑照片误删怎么办怎么才能找回,EasyRecovery 2023来帮您!!! EasyRecovery 2023是一款操作安全、价格便宜、用户自主操作的 数据恢复 方案,它支持从各种各样的 存储介质 恢复删除 或者丢失的文件,其支持的媒体介质包括: 硬盘驱动器 、光驱、闪存、

    2024年02月12日
    浏览(64)
  • 计算机中丢失msvcr120.dll怎么办,电脑找不到msvcr120.dll怎么办

    电脑提示msvcr120.dll丢失是一个常见的问题,这个问题通常会在你尝试打开某些程序或游戏时出现。这个问题的原因是因为你的电脑缺少了一个名为msvcr120.dll的文件,这个文件是微软Visual C++ Redistrle for Visualv 2013的一部分。如果你遇到了这个问题,不要担心,下面是三种解决方法

    2024年02月13日
    浏览(62)
  • 鼠标滚轮失灵怎么办?

    鼠标是非常重要的一个外设,我们经常需要使用鼠标的滚轮来上下滚动浏览网页中的内容,非常方便。但是最近有用户发现自己的鼠标上下滚轮出现问题,操作不灵敏,这该怎么办? 针对windows电脑 1、 同时按住Win+R键,打开运行,输入regedit,回车进入注册表编辑器; 2、 展

    2024年02月11日
    浏览(47)
  • 电脑突然死机怎么办?

    死机是电脑常见的故障问题,尤其是对于老式电脑来说,一言不合电脑画面就静止了,最后只能强制关机重启。那么你一定想知道是什么原因造成的吧,一般散热不良最容易让电脑死机,还有系统故障,比如不小心误删了系统运作的必要文件。那么面对电脑突然死机我们用什

    2024年04月10日
    浏览(61)
  • 怎么测试网络延迟,网络延迟过大怎么办?

    在各式各样的数据在网络介质中通过网络协议(如TCP/IP)进行传输,如果信息量过大不加以限制,超额的网络流量就会导致设备反映缓慢,造成网络延迟。 定义:在传输介质中传输所用的时间,即从报文开始进入网络到它开始离开网络之间的时间。 单位:毫秒(MS) 如何定义网

    2024年02月05日
    浏览(55)
  • win11取消开机密码pin无法删除怎么办 win11关闭开机密码pin选项灰色怎么办

    很多用户设置默认的开机密码pin,但是由于感觉太麻烦了,想要关闭该功能。结果发现选项变成了灰色,无法直接删除。那么win11关闭开机密码pin选项灰色该怎么办呢?今天小编就给大家具体的解决方法,有需要的用户们赶紧来看一下吧。 具体步骤如下: 1.右键开始菜单 。

    2024年02月16日
    浏览(52)
  • 全面解析:路由器设置192.168.1.1打不开怎么办?不知道192.168.1.1密码怎么办?

    我们在设置路由器时要进入192.168.1.1进行设置。可是,如果悲催的进不了192.168.1.1该怎么办呢?亦或是不知道登录192.168.1.1密码,该如何设置路由器?不用担心,本文将全面向大家解析这类问题,有需要的朋友快点来收藏吧! 192.168.1.1 192.168.1.1密码 192.168.1.1打不开 192.168.1.1设置

    2024年02月06日
    浏览(55)
  • 【C4D】基础快捷键操作,布尔操作,全选单个图形——动不了怎么办+选不上怎么办+怎么移动+怎么拉平面或拉平一圈线

    说惯谎言的人,最清楚不过承诺的脆弱,大多数时候,人们并非刻意说谎,他们只是对自己说出的话没有真正深入的了解——《死人经》       ;\\\\; C4D——选不上是因为没有C掉 、 内部挤压等于嵌入          ;\\\\;\\\\; ctrl+拖动面 可以拖出一个立体出来,比 挤压d

    2024年02月03日
    浏览(157)
  • 3d渲染画面变形怎么办?

    在用3dmax渲染图片时有时会遇到画面变形的情况,这个是什么原因呢?今天我们就来看看吧。 首先我们来看下变形的具体情况,再分析原因。 可以看到整个画面都畸变了,呈现出上下拉伸的情况,能造成这个效果的,只有相机类型选错了。 以VRay为例,它的相机类型有下面几

    2024年02月12日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包