Elasticsearch 搜索引擎实现对文档内容进行快速检索(保姆级教程)

本文主要讲解ES如何从提取文档中提取内容(word、pdf、txt、excel等文件类型),实现快速检索文档内容实现。

特别说明一下,为什么用7.10.0版本,因为在项目中除了精确匹配的要求,也会有模糊查询(关键字是wildcard )的场景。wildcard 这个只有 7.9 版本之后才支持 所以我推荐你使用 7.10.0。

elasticsearch,el, kibana,版本需要一致,比如elasticsearch版本是7.10.0,那么el和kibana的版本也需要是7.10.0,elasticsearch-head-master无所谓,尽量别用太低的版本。

本文实现思路

  • 一、ES下载安装运行
    • 1.下载安装ES
    • 2.修改配置,启动ES
  • 二、安装ik分词器
    • 1.什么是ik分词器
    • 2.新建ik文件夹
    • 3.解压elasticsearch-analysis-ik-7.10.0.zip
  • 三、安装Attachment
    • 1.Attachment 介绍
    • 2.安装Attachment
  • 四、安装ES可视化工具elasticsearch-head-master
    • 1.启动成功后访问:http://localhost:9100/
  • 五、定义—文本抽取管道(pipeline)
    • 1.请求地址(PUT ):_ingest/pipeline/attachment
  • 六、创建索引
    • 1.创建索引
  • 七、插入数据
    • 1.插入数据
  • 八、查询数据
    • 1.查询数据
    • 2.多条件查询
  • 九、Java 插入数据到Elasticsearch中进行各种类型文档的内容检索

一、ES下载安装运行

网盘包含:ES安装包、ik分词器、elasticsearch-head-master、kibana
网盘链接:https://pan.baidu.com/s/1_Vfcn0scS3vgZ2qSvc0TUw?pwd=j7f1
提取码:j7f1

在这里插入图片描述

1.下载安装ES

下载后解压文件夹,目录如图所示

在这里插入图片描述

在这里插入图片描述

2.修改配置,启动ES

进入到ES的config文件夹下,编辑 elasticsearch.yml 在末尾添加两行配置(该配置是为了不让ES进行签证认证),如果不加这两行配置,也可以去ES官网申请签证但是这个申请的签证是有试用期限的到期了还得重新申请所以我就直接给它过滤掉认证了。

http.cors.enabled: true
http.cors.allow-origin: “*”

在这里插入图片描述

这里再扩充一下后期用到的东西,现在你在自己电脑上访问ES没问题,如果外网其他电脑想连接你的ES,是需要再改一些配置的,还在在该文件里把框红的三个注释解开,不然会访问不到你的ES,因为ES默认是localhost访问,看图配置保存即可。
在这里插入图片描述

添加完配置后,进入ES的bin目录下,双击elasticsearch.bat,日志中提示started就说明启动成功啦

在这里插入图片描述

在这里插入图片描述

二、安装ik分词器

1.什么是ik分词器

ps:有人会好奇ik分词器是什么? 主要作用就是用来分词检索,比如 “我爱中国”,会进行粗粒分词和细粒分词,粗粒分词就是 “我爱” “中国”,细粒分词“我” “爱” “中” “国”,大概就是这个意思,想继续深挖的自行百度,我这里就不过多介绍了。后面会主要讲解它的使用方式

2.新建ik文件夹

进入到 elasticsearch-7.10.0\plugins 目录下,新建一个文件夹命名为小写 “ik”,这里有一个ingest-attachment文件夹,大家会发现你们没有,对滴!先别急,因为我之前已经装过了!后面我会讲它怎么下载以及作用,目前没有不耽误你们继续跟着文章学习。

在这里插入图片描述

3.解压elasticsearch-analysis-ik-7.10.0.zip

新建完 ik 文件夹后,把网盘中下载的 elasticsearch-analysis-ik-7.10.0.zip 解压到 ik文件夹里面,解压后的内容如下(解压完可以把elasticsearch-analysis-ik-7.10.0.zip删了,删不删无所谓),到这里我们的ik分词器就完成安装了。

在这里插入图片描述

三、安装Attachment

1.Attachment 介绍

简单理解就是处理文档的插件 ingest-attachment

Attachment 插件是 Elasticsearch 中的一种插件,允许将各种二进制文件(如PDF、Word文档等)以及它们的内容索引到 Elasticsearch 中。插件使用 Apache Tika 库来解析和提取二进制文件的内容。通过使用 Attachment 插件,可以轻松地在 Elasticsearch 中建立全文搜索功能,而无需事先转换二进制文件为文本。此说明来自:https://blog.csdn.net/lijie0213/article/details/134205963?spm=1001.2014.3001.5506

2.安装Attachment

windows安装先在ES的bin目录下执行命令 安装 ngest-attachment插件,刚才不是ik文件夹同级有一个 ingest-attachment,没错!现在我们来安装它!安装完后就是一堆jar包,附图就是安装完成后的样子。

在线安装
在ES的bin目录下执行命令 安装 ngest-attachment插件

elasticsearch-plugin install ingest-attachment

在这里插入图片描述

因为我已经下载过了,所以显示的日志会跟你们不一样,正常会有一个让你输入 Y 的提示,安装看不懂的可以看这篇博主的:https://blog.csdn.net/lijie0213/article/details/134205963?spm=1001.2014.3001.5506
在这里插入图片描述

离线安装网盘链接:https://pan.baidu.com/s/1RoUrVe_voYSFxnliB6eW3Q?pwd=qkpg
提取码:qkpg
在这里插入图片描述

四、安装ES可视化工具elasticsearch-head-master

无话可说,解压进入bin目录下,运行: npm run start

1.启动成功后访问:http://localhost:9100/

在这里插入图片描述
在这里插入图片描述
安装启动完成页面
在这里插入图片描述

五、定义—文本抽取管道(pipeline)

下列复制粘贴到 elasticsearch-head-master 可视化工具的复合查询选项中

1.请求地址(PUT ):_ingest/pipeline/attachment

{"description": "Extract attachment information","processors": [{"attachment": {"field": "content","indexed_chars": 1000000,"ignore_missing": true}},{"remove": {"field": "content"}}]
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/3b3d497e36a1469fb06dcf02a66ad68b.png
创建管道成功提示:

{
"acknowledged": true
}

六、创建索引

这个时候就可以创建我们自定义的索引了,索引这个东西你要研究的话还是有很多东西需要学的,我这里大概就说一下怎么去用,其他方面的自行百度。
关键词:mappings
mapping是映射,对比MySQL而言,他相当于MySQL的表结构定义。
包括:设置元数据、定义存储字段的类型、分区、副本等设置
关键词:properties 就是用来指定属性,比如下列索引内容中的 file_id,file_name 对应的就是你数据库表的字段,type是类型,keyword和text是ES中的字符串类型,
在这里插入图片描述

1、ik_max_word

会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。

2、ik_smart
会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。

1.创建索引

//创建索引
请求类型:PUT
索引名称:file_data(自定义)
{"mappings": {"properties": {"file_id":{"type": "keyword"},"file_name":{"type": "text","analyzer": "ik_max_word"},"file_type":{"type": "keyword"},"file_url":{"type": "keyword"},"group_file_id":{"type": "keyword"},"file_suffix":{"type": "keyword"},"file_size":{"type": "keyword"},"file_dir_name":{"type": "keyword"},"attachment": {"properties": {"content":{"type": "text","analyzer": "ik_smart"}}}}}
}

七、插入数据

1.插入数据

POST file_data/_doc?pipeline=attachment
{"file_id":"1","file_name":"性能分析排查思路","file_type":"pdf","file_url":"http://文件存储地址:8080/xxx/docs/raw/master/性能分析与内存问题排查思考.pdf","group_file_id":"123456","file_suffix":".pdf","file_size":"33","file_dir_name":"yryy","content":"很长很长的base64内容粘贴到这了"
}

在这里插入图片描述
在这里插入图片描述

base64就是这玩意,一大长串,你给他扔content里就行了,管道会自动把base64里面的内容提取出来放到ES中,不用你再去做这些处理了。
在这里插入图片描述

八、查询数据

1.查询数据

POST file_data/_search
{"query": {"match": {"attachment.content": {"query": "内存泄漏","analyzer": "ik_smart"}}}
}

这里提交的时候,注意一下请求方式,ES官方和很多博主说的都是GET请求,但是我得GET请求会查出所有数据,相当于我的查询参数设置没有生效,然后我用POST请求就成功了。这个好像是elasticsearch-head-master可视化工具的BUG,好像高版本已经修复了。
在这里插入图片描述

2.多条件查询

上面是我根据文件内容进行的查询,比如我想根据多条件查询怎么办呢?类似于mysql中的 and 条件 where id=1 and name=“文件名称”

{"query": {"bool": {"must": [{"match": {"attachment.content": {"query": "啊啊啊啊啊","analyzer": "ik_smart"}}},{"match": {"file_name": "性能分析排查思路"}}]}}
}

在这里插入图片描述

学习两位博主的文章:
https://blog.csdn.net/yuand7/article/details/136436712?spm=1001.2014.3001.5506

https://blog.csdn.net/lijie0213/article/details/134205963?spm=1001.2014.3001.5506

九、Java 插入数据到Elasticsearch中进行各种类型文档的内容检索

点击跳转:请看我这篇博客-Java 插入数据到Elasticsearch中进行各种类型文档的内容检索

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

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

相关文章

Android 异常开机半屏重启代码分析

Android 的稳定性是 Android 性能的一个重要指标,它也是 App 质量构建体系中最基本和最关键的一环;如果应用经常崩溃,或者关键功能不可用,那显然会对我们的留存产生重大影响所以为了保障应用的稳定性,我们首先应该树立…

在vue3+typescript中使用d3 version 7注意的地方

前几天在做一个前端项目,需要在一个vue3typescript的项目中使用d3 上次做vue2d3v5的项目已经很多年了,这次不仅是vue3,用的typescript,而且d3也升级到v7了,有很多东西不一样了。 这里记录一下,避免日后忘…

go-Expect-实验

实验脚本程序 test.sh read -p "Would you like to rejoin it to the cluster? [y/N]:" v echo if [ "$v" "y" ];thenecho "$(date %s)shark A" >> ./test.log fi read -p "Would you like to rejoin it to the cluste…

JDK14和JDK1.14相同吗?

关于Java开发工具包(JDK)的命名,我们可以从Java版本的发展历史来详细解析其命名规则。 在Java的早期版本中,JDK的版本号使用了“1.x”的格式,其中“x”是版本号,如JDK 1.0、JDK 1.1、JDK 1.2等。然而&…

Zynq UltraScale+ RFSoC 配置存储器器件

Zynq UltraScale RFSoC 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Zynq UltraScale RFSoC 器件执行擦除、空白检查、编程和验证等配置操 作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 , 并支持通过 Vivado 软件对其中所列…

【C语言】6.C语言VS实用调试技巧(2)

文章目录 6.调试举例17.调试举例28.调试举例3&#xff1a;数组9.编程常⻅错误归类9.1 编译型错误9.2 链接型错误9.3 运⾏时错误 – 6.调试举例1 求 1!2!3!4!…10! 的和。 int main() {int n 0;int i 0;int ret 1;int sum 0;for (n 1; n < 3; n) {for (i 1; i < …

knife4j案例

1.导入 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId> </dependency>2.在配置类中加入 knife4j 相关配置并设置静态资源映射&#xff08;否则接口文档页面无法访问&#xff…

就这?轻轻松松在RK356X Android11适配ML307R Cat.1模组

开源鸿蒙硬件方案领跑者 触觉智能 Industio 本文基于IDO-SXB3568主板&#xff0c;介绍Android11平台上适配中移物联ML307R Cat.1 4G模组的方法。该方法适用于触觉所有RK356X的主板。 IDO-SXB3568是触觉智能推出的RK3568行业主板&#xff0c;预计6月上旬正式上架售卖。该行业主…

CCF PTA 2022年11月C++大富翁游戏

【问题描述】 小明很喜欢玩大富翁游戏&#xff0c;这个游戏的规则如下&#xff1a; 1、游戏地图是有 N 个格子&#xff0c;分别编号从 1 到 N。玩家一开始位于 1 号格子。 2、地图的每个格子上都有事件&#xff0c;事件有以下两种类型&#xff1a; A&#xff09;罚款 x 枚金币…

使用Locust进行性能测试:快速指南与Python代码示例

性能测试是确保应用能够在预期负载下正常运行的关键步骤。在各种性能测试工具中&#xff0c;Locust以其轻量级、易用性以及可扩展性脱颖而出。它是一个用Python编写的开源性能测试工具&#xff0c;不仅能够模拟数以万计的用户对网站或应用程序进行压力测试&#xff0c;还允许测…

鸿蒙OS开发:【一次开发,多端部署】(应用UX设计原则)

应用UX设计原则 设计原则 当为多种不同的设备开发应用时&#xff0c;有如下设计原则&#xff1a; 差异性 充分了解所要支持的设备&#xff0c;包括屏幕尺寸、交互方式、使用场景、用户人群等&#xff0c;对设备的特性进行针对性的设计。 一致性 除了要考虑每个设备的特性…

shell脚本基础(简单if结构)

简单if结构 简单的if结构是&#xff1a; if expression then command command … fi 在使用这种简单if结构时&#xff0c;要特别注意测试条件后如果没有“&#xff1b;”&#xff0c;则then语句要换行&#xff0c;否则会产生不必要的错误。如果if和then可以处于同一行&#xff…

54.指针

目录 一.什么是指针&#xff1f; 二&#xff0e;定义一个指针变量 三&#xff0e;指针变量类型 四&#xff0e;取地址运算符& 五.取值运算符* 六.视频教程 一.什么是指针&#xff1f; 口语中的指针一般指指针变量&#xff0c;指针变量存放的是一个地址。普通变量存放…

电脑缺失api-ms-win-crt-runtime-l1-1-0.dll文件的几种修复方法

当您在使用电脑过程中遇到程序启动失败&#xff0c;提示缺少“api-ms-win-crt-runtime-l1-1-0.dll”文件时&#xff0c;不必过于焦虑&#xff0c;此问题通常与Windows系统的Visual C Redistributable组件未正确安装或损坏有关。小编将介绍5种修复电脑缺失api-ms-win-crt-runtim…

计算机毕业设计 | vue+springboot电影票售卖 影院售票商城 电影管理系统(附源码+论文)

1&#xff0c;项目背景 目的&#xff1a;本课题主要目标是设计并能够实现一个基于web网页的电影院购票选座系统&#xff0c;整个网站项目使用了B/S架构&#xff0c;基于vue和SpringBoot框架下开发&#xff1b;管理员通过后台管理系统实现管理影院信息&#xff0c;电影信息&…

[OpenGL] 点光源阴影(万向阴影贴图)

本章节源码 点击此处 文档持续更新 一 为什么采用点透视投影 透视投影: 由于点光源是一个点向四周发散的光线,所以这将导致点光源会以不同的角度到达场景中的不同表面&#xff0c;造成近大远小的效果,所以要采用透视投影矩阵来处理点光源的阴影,透视投影能够正确反映这种随着…

华为正式放弃高通芯片 | 百能云芯

5月15日&#xff0c;据外媒最新报道&#xff0c;高通公司正式确认&#xff0c;华为已无需依赖其处理器供应。 在出口许可被正式吊销前&#xff0c;高通的首席财务官已公开表示&#xff0c;预计明年与华为之间的芯片销售将为零&#xff0c;因为华为决定不再从高通购买4G芯片。 报…

[AI智能摄像头]RV1126部署yolov5并加速

导出onnx模型 yolov5官方地址 git clone https://github.com/ultralytics/yolov5 利用官方命令导出python export.py --weights yolov5n.pt --include onnx 利用代码导出 import os import sys os.chdir(sys.path[0]) import onnx import torch sys.path.append(..) from m…

在微信小程序项目中安装和使用 Vant 组件库

vant Wwapp 小程序开发组件库官网 Vant Weapp - 轻量、可靠的小程序 UI 组件库 安装 Vant 组件库 1.在微信小程序项目文件目录的空白位置右键&#xff0c;选择在外部终端窗口中打开 2在命令行输入如下命令&#xff08;在项目中创建包管理配置文件 package.json&#xff09; …

代码随想录Day28

17.电话号码的字母组合 题目&#xff1a;17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;有点难&#xff0c;每个数字对应几个字母&#xff0c;首先要建立这种映射&#xff0c;之后才能根据传进去的digits找到要用哪些字母集进行组合&#xf…