Elasticsearch实战之处理邮件附件进行进行内容全文检索

这篇具有很好参考价值的文章主要介绍了Elasticsearch实战之处理邮件附件进行进行内容全文检索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、系统环境和软件要求

二、软件说明

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

四、建立索引设置文档结构映射

五、插入文档

六、查询文档


需求是将本地邮件内容以及PDF,EXCEL,WORD等附件内容进行处理,保存到ES数据库,实现邮件内容及附件内容的全文检索。

一、系统环境和软件要求

系统:CentOS7.3

elasticsearch版本:7.13.3

kibana版本:7.16.3

ingest-attachment插件版本:7.13.3

二、软件说明

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。当前我们的用途主要是在kibana的开发工具dev tools中执行一些命令。

Ingest-Attachment是一个开箱即用的插件。可以将常用格式的文件作为附件写入Index。ingest attachment插件通过使用Apache Tika来提取文件,支持的文件格式有TXT、DOC、PPT、XLS和PDF等。 可以进行文本抽取及自动导入。注意:源字段必须是base64编码的二进制。

缺点:在处理xls和xlsx格式的时候,无法将sheet分开索引,只能将整个文件当做一个文档插入es中。

三、安装插件

我这里采用离线方式安装Ingest-Attachment,通过wget方式直接下载跟elasticsearch版本相同的离线文件。

wget https://artifacts.elastic.co/downloads/elasticsearch-plugins/ingest-attachment/ingest-attachment-7.13.3.zip

上传到服务器 目录

/home/es/install/ingest-attachment-7.13.3.zip

进入ES_HOME的主目录,执行下面的命令进行安装

cd /home/elasticsearch/

./bin/elasticsearch-plugin install file:///home/es/install/ingest-attachment-7.13.3.zip

安装完成后重启elasticsearch服务

插件安装完成!

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

在kibana的dev tool执行

我这里邮件可能是多个附件,所以定义文本抽取管道(多附件),我这里是设置 处理后移除base64的二进制数据。

需要注意的是,多附件的情况下,field和target_field必须要写成_ingest._value.*,否则不能匹配正确的字段。

PUT _ingest/pipeline/multiple_attachment
{
    "description" : "Extract attachment information from arrays",
    "processors" : [
      {
        "foreach" : {
          "field" : "attachments",
          "processor" : {
            "attachment" : {
              "target_field" : "_ingest._value.attachment",
              "field" : "_ingest._value.content"
            }
          }
        }
      },
      {
        "foreach" : {
          "field" : "attachments",
          "processor" : {
            "remove" : {
              "field" : "_ingest._value.content"
            }
          }
        }
      }
    ]
}

插件ingest attachment的pipeline参数含义

Name 是否必须 Default Description
field yes - 从这个字段中获取base64编码
target_field no attachment 用于保留attachment信息,主要用于多附件的情况
indexed_chars no 100000 限制字段的最大保存字符数。-1为无限制。
indexed_chars_field no - 可以从数据中设定的字段取到indexed_chars限制的值。
properties no 全属性 选择需要存储的属性。例如 contenttitlenameauthorkeywordsdatecontent_typecontent_lengthlanguage
ignore_missing no FALSE 如果使用true,并且 field 不存在, 则会忽略附件直接写入doc;否则则会报错。

四、建立索引设置文档结构映射

PUT mail
{
  "settings": {
    "index": {
      "max_result_window": 100000000
    },
    "number_of_shards": 3,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "mfrom": {
        "type": "keyword"
      },
      "mto": {
        "type": "keyword"
      },
      "mcc": {
        "type": "keyword"
      },
      "mbcc": {
        "type": "keyword"
      },
      "rcvtime": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss"
      },
      "subject": {
        "type": "keyword"
      },
      "importance": {
        "type": "keyword"
      },
      "savepath": {
        "type": "keyword"
      },
      "mbody": {
        "type": "text",
        "fields": {
          "keyword": {
            "ignore_above": 256,
            "type": "keyword"
          }
        }
      },
      "attachments": {
        "properties": {
          "attachment": {
            "properties": {
              "content": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "ignore_above": 256,
                    "type": "keyword"
                  }
                }
              },
              "filename": {
                "type": "keyword"
              },
              "type": {
                "type": "keyword"
              }
            }
          }
        }
      }
    }
  }
}

创建成功会返回

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "mail"
}

五、插入文档

可以使用Postman来调用elasticsearch的rest full接口完成文档插入或者更新。

请求类型:POST
请求地址:http://192.168.31.200:9200/mail/_doc?pipeline=multiple_attachment

请求地址中mail是索引名,pipeline=multiple_attachment指定需要使用的管道(pipeline)是multiple_attachment

请求body内容是JSON格式:

{
    "mfrom": "microsoft.teams@outlook.com",
    "mto": "network@163.com",
    "mcc": "",
    "mbcc": "",
    "rcvtime": "2023-05-18 23:35:29",
    "subject": "神奇的邮件2023066- ",
    "importance": "1",
    "savepath": "d:\\mail\\TEST123.eml",
    "mbody": "这是邮件内容",
     "attachments": [
        {
            "filename": "附件名字1.pdf",
            "type": ".pdf",
            "content": "5oiR54ix5L2g5Lit5Zu9MjAyMw=="
        },
        {
            "filename": "附件名字2.xlsx",
            "type": ".xlsx",
            "content": "Q2hhdEdQVCDniZvpgLwh"
        }
    ]
}

attachments是JSON数组,里面放2个附件的信息。filename是附件名字,content是附件解析出来的base64编码字符串。插入时通过管道处理,会自动识别内容,剩下的跟操作普通的索引一样。

下面是执行成功返回的内容:

{
    "_index": "mail",
    "_type": "_doc",
    "_id": "eiCNNIgBUc2qXUv978Tg",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 1,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}

Postman截图

Elasticsearch实战之处理邮件附件进行进行内容全文检索,Elasticsearch,elasticsearch,大数据,搜索引擎

六、查询文档

6.1 根据_id查看文档

GET请求地址 http://192.168.31.200:9200/mail/_doc/eiCNNIgBUc2qXUv978Tg

参数和内容无

其中eiCNNIgBUc2qXUv978Tg为文档_id,mail为需要查询的索引名

返回结果:

{
    "_index": "mail",
    "_type": "_doc",
    "_id": "eiCNNIgBUc2qXUv978Tg",
    "_version": 1,
    "_seq_no": 0,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "savepath": "d:\\mail\\TEST123.eml",
        "mbody": "这是邮件内容",
        "attachments": [
            {
                "filename": "附件名字1.pdf",
                "attachment": {
                    "content_type": "text/plain; charset=UTF-8",
                    "language": "lt",
                    "content": "我爱你中国2023",
                    "content_length": 10
                },
                "type": ".pdf"
            },
            {
                "filename": "附件名字2.xlsx",
                "attachment": {
                    "content_type": "text/plain; charset=UTF-8",
                    "language": "lt",
                    "content": "ChatGPT 牛逼!",
                    "content_length": 12
                },
                "type": ".pdf"
            }
        ],
        "mbcc": "",
        "subject": "神奇的邮件2023066- ",
        "importance": "1",
        "mfrom": "microsoft.teams@outlook.com",
        "mto": "network@163.com",
        "mcc": "",
        "rcvtime": "2023-05-18 23:35:29"
    }
}

Postman截图

Elasticsearch实战之处理邮件附件进行进行内容全文检索,Elasticsearch,elasticsearch,大数据,搜索引擎

6.2 模糊查询附件名字

Post请求地址 ​http://192.168.31.200:9200/mail/_search

​请求内容是JSON字符串,attachments.filename.keyword是附件名字(不分词)

{
  "query": {
        "bool": {
            "should": [{
                "wildcard": {
                    "attachments.filename.keyword": "*附件*"
                  
                }
            }]
        }
    }
}

返回结果

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "mail",
                "_type": "_doc",
                "_id": "eiCNNIgBUc2qXUv978Tg",
                "_score": 1.0,
                "_source": {
                    "savepath": "d:\\mail\\TEST123.eml",
                    "mbody": "这是邮件内容",
                    "attachments": [
                        {
                            "filename": "附件名字1.pdf",
                            "attachment": {
                                "content_type": "text/plain; charset=UTF-8",
                                "language": "lt",
                                "content": "我爱你中国2023",
                                "content_length": 10
                            },
                            "type": ".pdf"
                        },
                        {
                            "filename": "附件名字2.xlsx",
                            "attachment": {
                                "content_type": "text/plain; charset=UTF-8",
                                "language": "lt",
                                "content": "ChatGPT 牛逼!",
                                "content_length": 12
                            },
                            "type": ".pdf"
                        }
                    ],
                    "mbcc": "",
                    "subject": "神奇的邮件2023066- ",
                    "importance": "1",
                    "mfrom": "microsoft.teams@outlook.com",
                    "mto": "network@163.com",
                    "mcc": "",
                    "rcvtime": "2023-05-18 23:35:29"
                }
            }
        ]
    }
}

6.3 模糊查询附件内容

POST请求地址 http://192.168.31.200:9200/mail/_search

请求内容为JSON格式,attachments.attachment.content是附件内容(不加密)

{
    "size":"10000",
    "_source" :[
        "_id",
        "seqnbr",
        "subject",
        "eml"
    ],
    "query": {
    "match": {
      "attachments.attachment.content":"*ChatGPT*"
    }
  }
}

返回结果

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 0.2876821,
        "hits": [
            {
                "_index": "mail",
                "_type": "_doc",
                "_id": "eiCNNIgBUc2qXUv978Tg",
                "_score": 0.2876821,
                "_source": {
                    "subject": "神奇的邮件2023066- "
                }
            }
        ]
    }
}

七、其他说明


下面是单独说明的定义文本抽取的管道single_attachment

在kibana的dev tool执行

PUT _ingest/pipeline/single_attachment

{
  "description" : "Extract single attachment information",
  "processors" : [
    {
      "attachment" : {
        "field": "data",
        "indexed_chars" : -1,
        "ignore_missing" : true
      }
    }
  ]
}

剩下的就是代码集成的问题了。关于中文分词IK插件的使用,后期需要再详细说明。文章来源地址https://www.toymoban.com/news/detail-538368.html

到了这里,关于Elasticsearch实战之处理邮件附件进行进行内容全文检索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 软件测试/测试开发/全日制|学习使用Elasticsearch进行全文检索

    霍格沃兹测试开发学社推出了《Python全栈开发与自动化测试班》。本课程面向开发人员、测试人员与运维人员,课程内容涵盖Python编程语言、人工智能应用、数据分析、自动化办公、平台开发、UI自动化测试、接口测试、性能测试等方向。 为大家提供更全面、更深入、更系统

    2024年01月21日
    浏览(39)
  • 大文本的全文检索方案附件索引

    Elasticsearch 附件索引是需要插件支持的功能,它允许将文件内容附加到 Elasticsearch 文档中,并对这些附件内容进行全文检索。本文将带你了解索引附件的原理和使用方法,并通过一个实际示例来说明如何在 Elasticsearch 中索引和检索文件附件。 索引附件的核心原理是通过 Inges

    2024年02月12日
    浏览(25)
  • 使用Elasticsearch进行word,excel,PDF的全文检索 windows实现 超完整(ingest-attachment实现)

    首先要明确的一点就是Elasticsearch的版本要和ingest-attachment的版本一致,要不然没办法安装。然后还有一点JAVA版本要在11以上 先说说原理吧,其实就是将文件base64编码,然后再用插件读取文件内容并保存到es中。 安装完jdk之后用cmd查看一下java -version看看是否已经从1.8修改为了

    2024年02月13日
    浏览(28)
  • Spring Boot邮件发送教程:步步为营,轻松实现图片附件邮件!

      通过Spring Boot构建一个功能强大的邮件发送应用程序,重点是实现发送包含图片附件的邮件。我将逐步介绍添加必要的依赖、创建邮件服务类和控制器的步骤,并提供了具体的示例源代码。跟随这个简单而清晰的教程,您将能够轻松地集成邮件发送功能到您的Spring Boot应用中

    2024年02月04日
    浏览(37)
  • 无缓存定时发送带附件(表格)等邮件

    1.导入发送邮件的包 2.配置yml 3.添加定时任务 4.实现

    2024年02月11日
    浏览(31)
  • python提取邮件的附件,以excel为例

    配置邮箱、读取基本的邮件内容请参考:python读取并解析邮箱邮件,读取邮件主题、内容、时间 以excel为例: 获取邮件: 提取数据需要使用: 写入本地文件时,使用:

    2024年02月10日
    浏览(32)
  • Springboot 使用JavaMailSender发送邮件 + Excel附件

    目录 1.生成Excel表格 1.依赖设置 2.代码: 2.邮件发送 1.邮件发送功能实现-带附件  2.踩过的坑 1.附件名中文乱码问题 3.参考文章: 需求描述:项目审批完毕后,需要发送邮件通知相关人员,并且要附带数据库表生成的Excel表格,这就要求不光是邮件发送功能,还要临时生成E

    2024年02月07日
    浏览(34)
  • springboot 发送邮件,以及邮件工具类 并且解决spring-boot-starter-mail 发送邮件附件乱码或者文件错乱

    1、设置系统值 System.setProperty(“mail.mime.splitlongparameters”, “false”); 2、 在创建对象的时候定义编码格式(utf-8): MimeMessageHelper helper = new MimeMessageHelper(mes, true, “utf-8”); 3、 其次,在添加附件的时候,附件名是需要定义编码的 helper.addAttachment(MimeUtility.encodeWord(附件名,“utf-8”

    2024年02月15日
    浏览(45)
  • 让自己开发的VBA应用能够批量发送邮件(可带多个附件)

    当我们开发了一个VBA应用,很多时候需要让它能够自动批量发送邮件。这时候,我们就需要使用到CDO了。CDO全称Collaboration Data Objects,即协作数据对象,是Office 软件不在产品安装的一部分。它是通过基于COM的API提供对Outlook兼容对象的访问的包。CDO有多个组件,其中Message组件

    2024年02月11日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包