推广 热搜: 快速  企业  未来  公司  中国  上海  政策    行业  教师 

使用Elasticsearch 7.9.1实现对word,pdf,txt文件的全文内容检索

   日期:2024-11-07     作者:caijiyuan    caijiyuan   评论:0    移动:http://houdi.cs-ej.cn/mobile/news/486.html
核心提示:简单介绍一下需求能支持文件的上传,下载要能根据关键字,搜索出文件,要求要能搜索到文件里的文字,文件类型要支持word,pdf,t

简单介绍一下需求

使用Elasticsearch 7.9.1实现对word,pdf,txt文件的全文内容检索

  1. 能支持文件的上传,下载
  2. 要能根据关键字,搜索出文件,要求要能搜索到文件里的文字,文件类型要支持word,pdf,txt

文件上传,下载比较简单,要能检索到文件里的文字,并且要尽量精确,这种情况下很多东西就需要考虑进去了。这种情况下,我决定使用来实现。

因为准备找工作刷牛客的原因,发现很多面试官都问到了,再加上那时候我连是什么东西都不知道,所以就决定尝试一下新东西。 不得不说版本更新的是真的快,前几天才使用了,结果25号就出来了版本。

是一个开源的搜索文献的引擎,大概含义就是你通过请求告诉它关键字,他给你返回对应的内容,就这么简单。

封装了,是软件基金会一个开放源代码的全文检索引擎工具包。的调用比较复杂,所以就再次封装了一层,并且提供了分布式存储等一些比较高级的功能。

基于有很多的插件,我这次用到的主要有两个,一个是,一个是。

  • 主要用来构建请求,它提供了很多自动补全的功能。
  • 主要用来可视化。

首先安装,,,三个东西都是开箱即用,双击运行。需要注意的是的版本要和的版本对应。

是的可视化界面,是基于风格的来操作的,有了可视化界面,就不用每次都使用操作来查询了,能提升开发效率。

是使用开发的,在安装过程中可能会遇到跨域的问题:的默认端口是,而的默认端口是,需要改一下配置文件,具体怎么改就不详细说啦,毕竟有万能的搜索引擎。

安装完成之后,访问端口,就会出现以下界面。

有两个需要解决的核心问题,文件上传和输入关键词查询。

首先对于这种纯文本的形式来说,比较简单,直接将里面的内容传入即可。但是对于这两种特殊格式,文件中除了文字之外有很多无关的信息,比如图片,pdf中的标签等这些信息。这就要求对文件进行预处理。

Elasticsearch5.x以后提供了名为的功能,可以对输入的文档进行预处理。如图,PUT请求进入后会先判断有没有,如果有的话会进入进行处理,之后才会正式被处理。

是一个文本抽取插件,本质上是利用了的功能,提供了关键的预处理器。在安装目录下运行以下命令即可安装。


	

定义文本抽取管道


	

在中指定要过滤的字段为,所以写入时需要将文档内容放在字段。

运行结果如图:

建立文档结构映射

文本文件通过预处理器上传后以何种形式存储,我们需要建立文档结构映射来定义。PUT定义文档结构映射的时候就会自动创建索引,所以我们先创建一个的索引,用于测试。


	

在 中增加了字段,这个字段是命名抽取文档附件中文本后自动附加的字段。这是一个嵌套字段,其包含多个子字段,包括抽取文本 content 和一些文档信息元数据。

同是对文件的名字name指定分析器为 ,以让 在建立全文索引时对它们进行中文分词。

测试

经过上面两步,我们进行简单的测试。因为是基于 格式的文档数据库,所以附件文档在插入之前必须进行编码。先通过下面的网站将一个pdf文件转化为的文本。PDF to base64

测试文档如图:

然后通过以下请求上传上去,我找了一个很大的pdf文件。需要指定的是我们刚创建的,结果如图所示。

原来的索引有个类型,新版本后面会被弃用,默认的版本都是

然后我们通过操作看看我们的文档是否上传成功。可以看到已经被解析成功。

如果不指定的话,就会出现无法解析的情况。

根据结果我们看到,我们的PDF文件已经通过我们自行定义的,然后才正式进入索引数据库。

关键字查询即对输入的文字,能进行一定的分词处理。比如说对于“数据库计算机网络我的电脑”这一串词来说,要能将其分为“数据库”,“计算机网络”,“我的电脑”三个关键词,然后分别根据关键字查询。

自带了分词器,支持所有的字符,但是它只会做最大的划分,比如对于这四个字,会被分为这四个字,这样查询出来的结果就会包括。

这并不是我们想要的结果。我们想要的结果是,只分为这两段,然后查询相应的结果。这就需要使用支持中文的分词器了。

ik分词器

是开源社区比较流行的中文分词插件,我们首先安装ik分词器,注意以下代码不能直接使用。


	

包括两种模式。

  1. 会把中文尽可能的拆分。
  2. 会根据常用的习惯进行划分,比如会被划分为。

我们使用在查询时,指定进行查询文档,比如对于插入的测试文档,我们使用模式搜索,结果如图。


	
	

我们可以指定中的高亮,来为筛选到的文字添加标签。这样的话文字前后都会被添加上标签。如图。

编码使用的开发环境,首先导入依赖,依赖一定要与的版本相对应。

对于来说有两个,我们使用的封装的比较完善的高级。


	

先建立一个与上文对应的对象


	

首先根据上文所诉,我们要先将文件以字节数组的形式读入,然后转化成编码。


	

已经提供了现成的函数供我们使用。

接下来就可以使用的API将文件上传了。

上传需要使用对象,使用将转化为后,上传。需要使用函数指定我们上文中定义的。这样文件就会通过进行预处理,然后进入索引中。


	

文件查询需要使用对象,首先我要指定对我们的关键字使用的模式分词


	

之后我们就可以通过返回的对象获取每一个,之后获取返回的内容。


	

一个非常强大的功能是文件的高亮(highlight)功能,所以我们可以设置一个,对查询到的文本进行高亮操作。


	

我设置了前置标签对对查询的结果进行包裹。这样查询到的结果中就会包含对应的结果。

将这个文件夹里面的全部文件上传之后,使用可视化界面查看导入的文件。

搜索代码:


	

运行我们的demo,查询的结果如图所示。

demo的代码全部在:github链接

1. 文件长度问题

通过测试发现,对于文本内容超过10万字的文件,只保留10w字,后面的就被截断了,这就需要进一步了解对10w字以上的文本的支持。

2. 编码上的一些问题
本文地址:http://houdi.cs-ej.cn/news/486.html    成事e家 http://houdi.cs-ej.cn/ , 查看更多
 
标签: 检索 文内 文件
 
更多>同类行业资讯
0相关评论

新闻列表
企业新闻
推荐企业新闻
推荐图文
推荐行业资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号