你如何使用 elasticsearch-rails 的 ingest-attachment 插件?
How do you use the ingest-attachment plugin with elasticsearch-rails?
我以前使用的是现在已弃用的映射器附件插件,它与正常索引一起使用相当容易。现在 ingest-attachment 已经取代它并且需要管道等。如何正确使用它已经变得混乱。
假设我有一个名为 Media
的模型,它有一个包含 base64 编码文件的 file
字段。我在该文件中有以下映射:
mapping '_source' => { :excludes => ['file'] } do
indexes :id, type: :long, index: :not_analyzed
indexes :name, type: :text
indexes :visibility, type: :integer, index: :not_analyzed
indexes :created_at, type: :date, include_in_all: false
indexes :updated_at, type: :date, include_in_all: false
# attachment specific mappings
indexes 'attachment.title', type: :text, store: 'yes'
indexes 'attachment.author', type: :text, store: 'yes'
indexes 'attachment.name', type: :text, store: 'yes'
indexes 'attachment.date', type: :date, store: 'yes'
indexes 'attachment.content_type', type: :text, store: 'yes'
indexes 'attachment.content_length', type: :integer, store: 'yes'
indexes 'attachment.content', term_vector: 'with_positions_offsets', type: :text, store: 'yes'
end
我已经通过 curl 创建了一个附件管道:
curl -XPUT 'localhost:9200/_ingest/pipeline/attachment' -d'
{
"description" : "Extract attachment information",
"processors" : [
{
"attachment" : {
"field" : "file"
}
}
]
}'
现在,以前一个简单的 Media.last.__elasticsearch__.index_document
就足以通过 mapper-attachments
插件将记录与实际 file
一起编入索引。
我不确定如何使用 ingest-attachment
使用管道和 elasticsearch-rails
gem。
我可以通过 curl 执行以下 PUT:
curl -XPUT 'localhost:9200/assets/media/68?pipeline=attachment' -d'
{ "file" : "my_really_long_encoded_file_string" }'
这将为编码文件编制索引,但显然它不会为模型的其余数据编制索引(或者如果之前已编制索引,则会将其完全覆盖)。我真的不想在 curl 命令中包含每个模型属性和文件。有更好或更简单的方法吗?我是否完全没有管道和摄取应该工作?
终于明白了。我需要更新 ES gems,特别是 elasticsearch-api.
使用我所设置的映射和管道,您可以轻松地做到:
Media.last.__elasticsearch__.index_document pipeline: :attachment
或
Media.last.__elasticsearch__.update_document pipeline: :attachment
这将正确地为所有内容编制索引,并且您的文件将通过摄取管道正确解析和编制索引。
我以前使用的是现在已弃用的映射器附件插件,它与正常索引一起使用相当容易。现在 ingest-attachment 已经取代它并且需要管道等。如何正确使用它已经变得混乱。
假设我有一个名为 Media
的模型,它有一个包含 base64 编码文件的 file
字段。我在该文件中有以下映射:
mapping '_source' => { :excludes => ['file'] } do
indexes :id, type: :long, index: :not_analyzed
indexes :name, type: :text
indexes :visibility, type: :integer, index: :not_analyzed
indexes :created_at, type: :date, include_in_all: false
indexes :updated_at, type: :date, include_in_all: false
# attachment specific mappings
indexes 'attachment.title', type: :text, store: 'yes'
indexes 'attachment.author', type: :text, store: 'yes'
indexes 'attachment.name', type: :text, store: 'yes'
indexes 'attachment.date', type: :date, store: 'yes'
indexes 'attachment.content_type', type: :text, store: 'yes'
indexes 'attachment.content_length', type: :integer, store: 'yes'
indexes 'attachment.content', term_vector: 'with_positions_offsets', type: :text, store: 'yes'
end
我已经通过 curl 创建了一个附件管道:
curl -XPUT 'localhost:9200/_ingest/pipeline/attachment' -d'
{
"description" : "Extract attachment information",
"processors" : [
{
"attachment" : {
"field" : "file"
}
}
]
}'
现在,以前一个简单的 Media.last.__elasticsearch__.index_document
就足以通过 mapper-attachments
插件将记录与实际 file
一起编入索引。
我不确定如何使用 ingest-attachment
使用管道和 elasticsearch-rails
gem。
我可以通过 curl 执行以下 PUT:
curl -XPUT 'localhost:9200/assets/media/68?pipeline=attachment' -d'
{ "file" : "my_really_long_encoded_file_string" }'
这将为编码文件编制索引,但显然它不会为模型的其余数据编制索引(或者如果之前已编制索引,则会将其完全覆盖)。我真的不想在 curl 命令中包含每个模型属性和文件。有更好或更简单的方法吗?我是否完全没有管道和摄取应该工作?
终于明白了。我需要更新 ES gems,特别是 elasticsearch-api.
使用我所设置的映射和管道,您可以轻松地做到:
Media.last.__elasticsearch__.index_document pipeline: :attachment
或
Media.last.__elasticsearch__.update_document pipeline: :attachment
这将正确地为所有内容编制索引,并且您的文件将通过摄取管道正确解析和编制索引。