web-dev-qa-db-fra.com

Comment indexer un fichier pdf dans Elasticsearch 5.0.0 avec le plugin ingest-attachment?

Je suis nouveau sur Elasticsearch et je lis ici https://www.elastic.co/guide/en/elasticsearch/plugins/master/mapper-attachments.html que le plugin mapper-attachments est déconseillé dans elasticsearch 5.0.0.

J'essaie maintenant d'indexer un fichier pdf avec le nouveau plugin ingest-attachment et de télécharger la pièce jointe.

Ce que j'ai essayé jusqu'à présent, c'est

curl -H 'Content-Type: application/pdf' -XPOST localhost:9200/test/1 -d @/cygdrive/c/test/test.pdf

mais j'obtiens l'erreur suivante:

{"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}

Je m'attends à ce que le fichier pdf soit indexé et téléchargé. Qu'est-ce que je fais mal?

J'ai également testé Elasticsearch 2.3.3 mais le plugin mapper-attachments n'est pas valide pour cette version et je ne veux pas utiliser une ancienne version d'Elasticsearch.

14
7twenty7

Vous devez vous assurer que vous avez créé votre pipeline ingest avec:

PUT _ingest/pipeline/attachment
{
  "description" : "Extract attachment information",
  "processors" : [
    {
      "attachment" : {
        "field" : "data",
        "indexed_chars" : -1
      }
    }
  ]
}

Ensuite, vous pouvez faire un [~ # ~] mettre [~ # ~] pas [~ # ~] poster [~ # ~] dans votre index en utilisant le pipeline que vous avez créé.

PUT my_index/my_type/my_id?pipeline=attachment
{
  "data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0="
}

Dans votre exemple, devrait être quelque chose comme:

curl -H 'Content-Type: application/pdf' -XPUT localhost:9200/test/1?pipeline=attachment -d @/cygdrive/c/test/test.pdf

Rappelant que le contenu PDF doit être encodé en base64.

J'espère que cela vous aidera.

Edit 1 Veuillez vous assurer de les lire, cela m'a beaucoup aidé:

ingestion élastique

Plugin d'intégration

ingérer la présentation

Éditer 2

De plus, vous devez avoir le plugin ingest-attachment installé.

./bin/elasticsearch-plugin install ingest-attachment

Modifier 3

S'il vous plaît, avant de créer votre processeur d'ingestion (pièce jointe), créez votre index, map avec les champs que vous utiliserez et assurez-vous d'avoir le champ de données dans votre carte (même nom du "champ" dans votre processeur de pièces jointes) ), donc l'ingestion traitera et remplira votre champ de données avec votre contenu pdf.

J'ai inséré l'option indexed_chars dans le processeur d'ingestion, avec la valeur 1, afin que vous puissiez indexer de gros fichiers pdf.

Édition 4

Le mappage devrait être quelque chose comme ça:

PUT my_index
{ 
    "mappings" : { 
        "my_type" : { 
            "properties" : { 
                "attachment.data" : { 
                    "type": "text", 
                    "analyzer" : "brazilian" 
                } 
            } 
        } 
    } 
}

Dans ce cas, j'utilise le filtre brésilien, mais vous pouvez le supprimer ou utiliser le vôtre.

17
Evis