-1

Ich habe zuvor das mapper-attachments plugin verwendet, das nun veraltet ist, was ziemlich einfach war, zusammen mit der normalen Indizierung. Nun, da der Ingest-Anhang es ersetzt hat und eine Pipeline usw. benötigt, ist es verwirrend geworden, wie man dies richtig benutzt.Wie verwenden Sie das Ingest-Attachment-Plugin mit elasticsearch-rails?

Nehmen wir an, ich habe ein Modell mit dem Namen Media, das ein file Feld enthält, das die Base64-codierte Datei enthält. Ich habe folgende Zuordnungen in dieser Datei:

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 

ich eine Anlage Pipeline über curl erstellt haben:

curl -XPUT 'localhost:9200/_ingest/pipeline/attachment' -d' 
{ 
    "description" : "Extract attachment information", 
    "processors" : [ 
    { 
     "attachment" : { 
     "field" : "file" 
     } 
    } 
    ] 
}' 

nun vorher eine einfache Media.last.__elasticsearch__.index_document zusammen mit dem tatsächlichen indizieren eine Aufzeichnung ausreichend gewesen wäre file über das mapper-attachments Plugin.

Ich bin mir nicht sicher, wie man das mit ingest-attachment unter Verwendung einer Pipeline und der elasticsearch-rails Edelstein.

kann ich die folgende PUT über curl tun:

curl -XPUT 'localhost:9200/assets/media/68?pipeline=attachment' -d' 
{ "file" : "my_really_long_encoded_file_string" }' 

Dies wird Index der codierten Datei aber offensichtlich nicht wahr Index den Rest der Daten des Modells (oder überschreibt es vollständig, wenn sie zuvor indiziert wurde) . Ich möchte nicht wirklich jedes einzelne Modellattribut zusammen mit der Datei in einen Curl-Befehl einschließen müssen. Gibt es dafür bessere oder einfachere Wege? Bin ich gerade völlig ohne Pipelines und Aufnahme sollte funktionieren?

Antwort

0

Endlich herausgefunden. Ich brauchte, um die ES-Edelsteine ​​zu aktualisieren, speziell elasticsearch-api.

Mit den Zuordnungen und Pipeline gesetzt, wie ich es haben, können Sie einfach nur tun:

Media.last.__elasticsearch__.index_document pipeline: :attachment

oder

Media.last.__elasticsearch__.update_document pipeline: :attachment

Dies wird Index alles richtig und Ihre Datei wird über die Ingest-Pipeline richtig geparst und indexiert.

Verwandte Themen