ES全文检索pdf、word、txt等文本文件内容

本文记录了如何使用Elasticsearch 8.6.2进行全文检索,特别是针对PDF、Word、TXT等文本文件的内容检索和高亮显示。通过内置的ingest attachment插件,实现了文件内容的抽取,并使用RestHighLevelClient进行文档上传和高亮查询操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:
用ES对上传文件内容的检索和高亮显示。
之前从事于物联网行业,从多年前了解ES以后没有使用过,本篇文章就是为了记录小白用ES完成工作的过程。
Elasticsearch的介绍、安装和环境这里不过多介绍,网上有很多。
思考:
文本关键字搜索,文本需要上传elasticsearch。支持任意格式文件。纯文本文件应该很容易实现,而对于包含图片和文本的文件怎么处理?
es的文本抽取插件可以帮我们实现。
环境介绍:
由于是已有的环境,es版本已经确定好了,elasticsearch 8.6.2,看了一下官方网页,属于很新的版本(这样的版本意味遇到问题不好找原因和解决办法)
查询es版本信息

es解析文本需要用到ingest attachment插件解析文件中的文本,需要先把文件转base64,具体官网有介绍https://www.elastic.co/guide/en/elasticsearch/reference/8.7/attachment.html 本次使用的es8.6.2版本已经把插件集成进来了,无需单独下载安装。低版本安装attchment插件:在安装目录下,
./bin/elasticsearch-plugin install ingest-attachment

创建索引库

PUT /file2
{
   
   
  "mappings": {
   
   
    "properties": {
   
   
      "deptId":{
   
   
        "type": "long"
      },
      "title":{
   
   
        "type": "text",
        "analyzer": "ik_smart"
      },
      "summary": {
   
   
          "type": "text",
		      "analyzer": "ik_smart"
      },
      "attachment": {
   
   
        "properties": {
   
   
          "content":{
   
   
            "type": "text",
            "analyzer": "ik_smart",
            "index_options" : "offsets"
          }
        }
      }
    }
  }
}

attachment指定抽取解析的文本内容

PUT _ingest/pipeline/attachment
{
   
   
  "description" : "Extract attachment information",
  "processors" : [
    {
   
   
      "attachment" : {
   
   
        "field" : "content",
        "remove_binary": false,
        "indexed_chars" : -1
      }
    }
  ]
}

“field” : “content”,指定文本字段端
“remove_binary”: false,保存base64文件内容 true不保存
“indexed_chars” : -1 不限制解析文件管道流的最大大小,不设置默认100000
因为要使用高亮,选择RestHighLevelClient,所以需要引入依赖

		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>elasticsearch-rest-high-level-client</artifactId>
			<version>7.17.4</version>
		</dependency>

创建RestHighLevelClient对象

RestHighLevelClient restClient= new RestHighLevelClient(RestClient.builder(new HttpHost(elasticsearchServerIp, elasticsearchServerPort, "http")));

上传文档内容

    @Async
    public void addOrUpdateNew(String fileUrl ,String title,String summary) {
   
   
        try {
   
   
        	//文件标题
            fileEntity.setTitle(title);
            //文件摘要
            fileEntity.setSummary(summary);
            //判断文件类型
            String fileType = getFileTypeByDefaultTika(fileUrl);
            if (fileType != null) {
   
   
                if (!fileType.contains("video") && !fileType.contains("image") && !"application/zip".equals(fileType)) {
   
   
                    byte[] bytes 
SpringBoot是一种快速构建基于Spring框架的Java应用程序的工具。为了实现对wordpdftxt等文件的非结构化数据全文内容检索,可以使用SpringBoot和ElasticsearchES)来实现。Elasticsearch是一种开源搜索引擎,其使用简单、快速高效、支持几乎所有类型的查询操作。 首先,需要将wordpdftxt等文件的非结构化数据存储到ES中。可以使用Java中的POI、Apache Tika等工具来解析这些文件,将其转换为需要的文本格式,并将其存储到ES中。可以使用Spring Data Elasticsearch来实现与ES的交互,并创建一个Document对象来表示每个文件。 其次,需要编写一个查询方法来搜索这些文件。可以使用ES提供的全文检索功能,使用户可以搜索其内容并找到与搜索关键字相关联的文件。可以使用Spring Data Elasticsearch来创建查询对象并执行查询,将结果返回给用户。 需要注意的是,对于WordPDF等二进制文件,需要将其转换为文本格式,而对于文本文件,只需将其直接存储到ES中。此外,还需考虑一些优化措施,如数据分片、数据备份和恢复等,以确保数据的完整性和可靠性。 最后,SpringBoot和ES的集成可以大大简化非结构化数据全文内容检索的开发和部署工作。它不仅可以提高检索效率,还可以保证数据的高可靠性和安全性。因此,它是一种非常有用的工具,可以满足企业的数据检索和管理需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值