如何使用Elasticsearch Ruby消费附件管道文档及API调用求助
没问题,我来帮你一步步解决这两个问题~
先解决你提到的管道附加文档的请求问题
你当前的PUT请求有两处需要调整:
- Elasticsearch 7.0及以上版本已经废弃了文档类型(my_type),所以URL里要移除这部分;
- 必须提前创建好
attachment管道,否则请求会直接失败。
第一步:创建attachment管道
先执行这个命令创建管道(可以用Kibana Dev Tools或者curl):
PUT _ingest/pipeline/attachment { "description": "提取附件内容信息", "processors": [ { "attachment": { "field": "data", # 指定要处理的字段(你的base64数据存在这个字段) "target_field": "attachment" # 处理后的结果存到这个字段 } } ] }
第二步:修正后的索引请求
现在用正确的格式发送PUT请求:
PUT my_index/_doc/my_id?pipeline=attachment { "data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=" }
你提供的base64内容是一个简单的文本文件,处理完成后,文档的attachment字段会包含解析后的文本内容、文件类型等信息。
用Elasticsearch Ruby客户端消费(索引+查询)文档
下面是完整的Ruby代码示例,涵盖从初始化到查询解析后内容的全流程:
1. 安装Ruby客户端
先确保你安装了官方的elasticsearch gem:
gem install elasticsearch
2. 初始化ES客户端
require 'elasticsearch' # 根据你的ES集群配置调整参数 client = Elasticsearch::Client.new( hosts: ['http://localhost:9200'], retry_on_failure: 3, request_timeout: 120 )
3. (可选)用Ruby创建attachment管道
如果还没通过curl/Kibana创建管道,也可以用Ruby代码完成:
client.ingest.put_pipeline( id: 'attachment', body: { description: 'Extract attachment content', processors: [ { attachment: { field: 'data', target_field: 'attachment' } } ] } )
4. 索引文档并指定管道
把你的base64数据传入,同时指定使用attachment管道处理:
# 替换成你的base64编码附件内容 base64_attachment = "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=" # 索引文档 client.index( index: 'my_index', id: 'my_id', pipeline: 'attachment', # 关键:指定使用attachment管道 body: { data: base64_attachment } )
5. 查询并消费解析后的内容
现在可以查询文档,获取管道处理后的附件信息:
# 获取文档详情 document = client.get(index: 'my_index', id: 'my_id') # 提取解析后的内容 attachment_content = document['_source']['attachment']['content'] content_type = document['_source']['attachment']['content_type'] puts "解析后的附件文本:\n#{attachment_content}" puts "附件类型:#{content_type}"
额外注意事项
- 确保你的Elasticsearch已经安装了
ingest-attachment插件,否则attachment处理器会失效。安装命令(根据你的ES路径调整):bin/elasticsearch-plugin install ingest-attachment - 如果你的ES版本低于7.0,那需要保留文档类型字段,请求格式为
PUT my_index/my_type/my_id?pipeline=attachment,但还是建议升级到高版本,因为文档类型已经被官方废弃。
内容的提问来源于stack exchange,提问作者sushilprj
相关产品推荐
相关产品推荐

