首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在带有摄取附件插件的Elasticsearch 5.0.0中索引pdf文件?

如何在带有摄取附件插件的Elasticsearch 5.0.0中索引pdf文件?
EN

Stack Overflow用户
提问于 2016-06-16 21:52:21
回答 1查看 20.5K关注 0票数 18

我是Elasticsearch的新手,我在这里读到https://www.elastic.co/guide/en/elasticsearch/plugins/master/mapper-attachments.html,在elasticsearch 5.0.0中不推荐使用映射器-附件插件。

我现在尝试用新的摄取附件插件索引一个pdf文件并上传附件。

到目前为止,我尝试过的是

代码语言:javascript
运行
复制
curl -H 'Content-Type: application/pdf' -XPOST localhost:9200/test/1 -d @/cygdrive/c/test/test.pdf

但我得到以下错误:

代码语言:javascript
运行
复制
{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse"}],"type":"mapper_parsing_exception","reason":"failed to parse","caused_by":{"type":"not_x_content_exception","reason":"Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes"}},"status":400}

我希望该pdf文件将被索引和上传。我做错了什么?

我还测试了Elasticsearch 2.3.3,但是mapper-attachments插件对这个版本无效,我不想使用任何旧版本的Elasticsearch。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-31 05:54:25

您需要确保已使用以下命令创建了摄取管道:

代码语言:javascript
运行
复制
PUT _ingest/pipeline/attachment
{
  "description" : "Extract attachment information",
  "processors" : [
    {
      "attachment" : {
        "field" : "data",
        "indexed_chars" : -1
      }
    }
  ]
}

然后,您可以使用所创建的管道对索引执行PUT而不是POST。

代码语言:javascript
运行
复制
PUT my_index/my_type/my_id?pipeline=attachment
{
  "data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0="
}

在您的示例中,应该类似于:

代码语言:javascript
运行
复制
curl -H 'Content-Type: application/pdf' -XPUT localhost:9200/test/1?pipeline=attachment -d @/cygdrive/c/test/test.pdf

记住,PDF内容必须是base64编码的。

希望能对你有所帮助。

编辑1请务必阅读这些,它对我帮助很大:

Elastic Ingest

Ingest Plugin

Ingest Presentation

编辑2

此外,您还必须安装ingest-attachment插件。

代码语言:javascript
运行
复制
./bin/elasticsearch-plugin install ingest-attachment

编辑3

请在创建摄取处理器(附件)之前,创建索引,映射您将使用的字段,并确保映射中有data字段(与附件处理器中的“字段”同名),以便摄取将处理并使用您的pdf内容填充您的data字段。

我在摄取处理器中插入了indexed_chars选项,值为-1,这样您就可以索引大型pdf文件。

编辑4

映射应该是这样的:

代码语言:javascript
运行
复制
PUT my_index
{ 
    "mappings" : { 
        "my_type" : { 
            "properties" : { 
                "attachment.data" : { 
                    "type": "text", 
                    "analyzer" : "brazilian" 
                } 
            } 
        } 
    } 
}

在本例中,我使用了巴西过滤器,但您可以删除它或使用您自己的过滤器。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37861279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档