.net core 操作Ingest-Attachment插件
Ingest-Attachment是一个开箱即用的插件,可以实现对(PDF,DOC等)主流格式文件的文本抽取及自动导入
安装(可以手动下载插件包放入到es plugin目录下):
cmd 进入到elasticsearch bin目录下,执行以下命令,等待安装插件
elasticsearch-plugin install ingest-attachment
卸载:
cmd 进入到elasticsearch bin目录下,执行以下命令
elasticsearch-plugin remove ingest-attachment
使用ingest-attachment前先建立管道(全局执行一次即可使用)
使用kibana建立抽取管道
PUT _ingest/pipeline/file_attachment { "description": "Extract attachment information", "processors": [ { "attachment": { "field": "data", "indexed_chars": -1, "ignore_missing": true, "properties":["content","title","content_type"] } }, { "remove": { "field": "data" } } ] }
注意:file_attachment 为管道名称,可以随便命名,但必须跟代码对应,否则会出现创建索引失败
创建索引
PUT /idx_file { "mappings": { "properties": { "addtime":{ "type": "keyword" }, "address":{ "type": "text" }, "adduser":{ "type": "keyword" }, "filename":{ "type": "keyword" }, "path":{ "type": "text" }, "title":{ "type": "text" }, "attachment": { "properties": { "data":{ "type": "text", "analyzer": "ik_smart" } } } } } }
创建webapi程序,并添加NEST包。
向ES添加文件代码如下
IndexDto dto = new IndexDto() { addtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), adduser = "admin", data = str, filename = input.FileName, id = input.Id, path = input.Path, title = input.Title, }; var response = await _elasticClient.IndexAsync(dto, x => x.Pipeline("file_attachment"));
注意:data为文件内容的BASE64编码,文件必须为UTF8编码格式,否则不能正常显示文件内容
添加文件后,查询结果