Partage
  • Partager sur Facebook
  • Partager sur Twitter

elasticsearch

Importation de données

    17 janvier 2023 à 17:30:30

    Bonjour à tous,

    J'ai suivi pas à pas le tuto sur les bases de données NoSQL et après plusieurs jours entiers je n'ai pas réussis à intégrer les données dans mon Index elasticsearch.

    J'ai télécharger le fichier Movies qui est proposé dans le cours que j'ai tenté d'intégrer avec l'utilitaire CURL comme indiqué mais je n'y parvient pas.

    J'ai installé elasticsearch en version 8.5.3 sous Windows 10, j'arrive à communiquer avec localhot:9200 mais je n'arrive pas à intégrer des données.

    Si quelqu'un peut m'éclairer ...

    Merci d'avance. :)

    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2023 à 8:05:43

      Bonjour,

      Tu as un exemple de code tests ?

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        23 janvier 2023 à 15:34:58

        Bonjour,

        Merci pour votre réponse.

        Je cherche à utiliser CURL pour insérer les données avec la commande:

        - curl -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/_bulk" --data-binary "@movies_elastic2.json"

        Je reçois l'erreur :

        -{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [index]"}],"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [index]"},"status":400}

        J'en suis arriver à installer Go pour elasticsearch (source github) mais je n'ai pas compris où on doit rajouter du code dans un fichier .go (lequel et où il se trouve).

        J'ai aussi utilisé un script en python qui ne plante pas mais je ne parvient pas à vérifier si j'ai des données dans mon indexes j'ai essayé:

        - curl -X GET localhost:9200/nom_de_votre_index/_search?pretty -H "Content-Type: application/json" -d "{"query": {"match_all": {}} }"

        je reçois :

        -   "error" : {

            "root_cause" : [

              {

                "type" : "x_content_parse_exception",

                "reason" : "[1:3] Unexpected character ('q' (code 113)): was expecting double-quote to start field name\n at [Source: (org.elasticsearch.common.io.stream.ByteBufferStreamInput); line: 1, column: 3]"

              }

        Je ne vois pas où est l'erreur de syntaxe.

        A l'adresse localhost/Movies2/movie/_search je reçois:

        -{"error":"no handler found for uri [/movies2/movie/_search] and method [GET]"}

        Je n'arrive pas à debbuger non plus.

        Si vous avez une idée, merci d'avance.

        -
        Edité par GabrielGatto 23 janvier 2023 à 15:48:19

        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2023 à 16:00:54

          Dans tout ce que tu as donné, je ne vois aucun code Python...

          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

            24 janvier 2023 à 11:08:43

            Merci pour tes réponses.

            C'est parceque j'ai utilisé python en désespoir de cause.

            Voici mon script python et le début de mon fichier de données qui est au format JSON (validé).

            import sys
            import json
            from pprint import pprint
            from elasticsearch import Elasticsearch
            es = Elasticsearch([{'host': 'localhost', 'port': 9200,'scheme': 'https'}])
            
            MyFile= open(r"C:\Users\GABRIEL.GATTO\Documents\Perso\ElasticSearch\elasticsearch-8.5.3-windows-x86_64\DATA\movies_for_elastic.json\mapping_movies\movies_elastic2_bckp.json", encoding="utf8").read()
            ClearData = MyFile.splitlines(True)
            i=0
            json_str=""
            docs ={}
            for line in ClearData:
                line = ''.join(line.split())
                if line != "},":
                    json_str = json_str+line
                else:
                    docs[i]=json_str+"}"
                    json_str=""
                    print(docs[i])
                    es.index(_index='movies2', _id=i, body=docs[i])
                    i=i+1

            {"index":{"_index": "movies2","_id": 1},

            "fields": {"directors" : ["Joseph Gordon-Levitt"],"release_date" : "2013-01-18T00:00:00Z","rating" : 7.4,"genres" : ["Comedy","Drama"],"image_url" : "http://ia.media-imdb.com/images/M/MV5BMTQxNTc3NDM2MF5BMl5BanBnXkFtZTcwNzQ5NTQ3OQ@@._V1_SX400_.jpg","plot" : "A New Jersey guy dedicated to his family, friends, and church, develops unrealistic expectations from watching porn and works to find happiness and intimacy with his potential true love.","title" : "Don Jon","rank" : 1,"running_time_secs" : 5400,"actors" : ["Joseph Gordon-Levitt","Scarlett Johansson","Julianne Moore"],"year" : 2013,"id" : "tt2229499","type" : "add"},

            "index":{"_index": "movies2","_id": 2},

            Merci d'avance.
            • Partager sur Facebook
            • Partager sur Twitter
              24 janvier 2023 à 17:13:21

              pas sûr que ton format json soit OK: tu as plusieurs fois "index" au même niveau d'arborescence (clés dupliquées)

              GabrielGatto a écrit:

              Bonjour,

              Merci pour votre réponse.

              Je cherche à utiliser CURL pour insérer les données avec la commande:

              - curl -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/_bulk" --data-binary "@movies_elastic2.json"

              Je reçois l'erreur :

              -{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [index]"}],"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [index]"},"status":400}

               l'erreur est affichée: le paramètre [index] est inconnu, il s'attend donc à autre chose.

              J'en suis arriver à installer Go pour elasticsearch (source github) mais je n'ai pas compris où on doit rajouter du code dans un fichier .go (lequel et où il se trouve).

              J'ai aussi utilisé un script en python qui ne plante pas mais je ne parvient pas à vérifier si j'ai des données dans mon indexes j'ai essayé:

              - curl -X GET localhost:9200/nom_de_votre_index/_search?pretty -H "Content-Type: application/json" -d "{"query": {"match_all": {}} }"

              je reçois :

              -   "error" : {

                  "root_cause" : [

                    {

                      "type" : "x_content_parse_exception",

                      "reason" : "[1:3] Unexpected character ('q' (code 113)): was expecting double-quote to start field name\n at [Source: (org.elasticsearch.common.io.stream.ByteBufferStreamInput); line: 1, column: 3]"

                    }

              Je ne vois pas où est l'erreur de syntaxe.

              a priori un guillemet en trop dans la ligne de commande ou les guillemets intérieurs doivent être échappés:

              curl -X GET localhost:9200/nom_de_votre_index/_search?pretty -H "Content-Type: application/json" -d "{\"query\": {\"match_all\": {}} }"

              A l'adresse localhost/Movies2/movie/_search je reçois:

              -{"error":"no handler found for uri [/movies2/movie/_search] and method [GET]"}

              Je n'arrive pas à debbuger non plus.

              Si vous avez une idée, merci d'avance.


              là, ça indique que la méthode GET n'est pas géré.
              • Partager sur Facebook
              • Partager sur Twitter
                25 janvier 2023 à 10:13:23

                Bonjour Umfred,

                Merci pour ta réponse. :)

                Pour mon fichier JSON il est validé soit avec NotePad++ soit avec un utilitaire en ligne. Je comprend pas ton commentaire (tu as plusieurs fois "index" au même niveau d'arborescence (clés dupliquées)) mais je vais y regarder.

                Je vais essayer la syntaxe que tu me dones pour la requête CURL.

                Encore merci pur tes infos. :) 

                • Partager sur Facebook
                • Partager sur Twitter
                  25 janvier 2023 à 10:28:57

                  {
                     "index":{ <================================
                        "_index":"movies2",
                        "_id":1
                     },
                     "fields":{
                        "directors":[
                           "Joseph Gordon-Levitt"
                        ],
                        "release_date":"2013-01-18T00:00:00Z",
                        "rating":7.4,
                        "genres":[
                           "Comedy",
                           "Drama"
                        ],
                        "image_url":"http://ia.media-imdb.com/images/M/MV5BMTQxNTc3NDM2MF5BMl5BanBnXkFtZTcwNzQ5NTQ3OQ@@._V1_SX400_.jpg",
                        "plot":"A New Jersey guy dedicated to his family, friends, and church, develops unrealistic expectations from watching porn and works to find happiness and intimacy with his potential true love.",
                        "title":"Don Jon",
                        "rank":1,
                        "running_time_secs":5400,
                        "actors":[
                           "Joseph Gordon-Levitt",
                           "Scarlett Johansson",
                           "Julianne Moore"
                        ],
                        "year":2013,
                        "id":"tt2229499",
                        "type":"add"
                     },
                     "index":{ <==============================
                        "_index":"movies2",
                        "_id":2
                     }
                  }

                  Si tu regardes, les 2 "index" sont au même niveau, (en supprimant les extras; on voit mieux):

                  {
                     "index":{
                        ...
                     },
                     "fields":{
                        ...
                        ],
                        ...,
                     },
                     "index":{
                        ...
                     }
                  }



                  • Partager sur Facebook
                  • Partager sur Twitter
                    Hier à 10:52

                    Bonjour,

                    j'utilise cette requête pour insérer des données dans un index elasticsearch mais je n'y parvient pas sachant que je communique bien avec mon localhost. 

                    curl -H "Content-Type: application/json" -XPOST "http://localhost:9200/clients/simple" -d "{ \"nom\" : \"gab\"}"

                    J'obtiens l'erreur suivante:

                    "error":"no handler found for uri [/clients/simple] and method [POST]"

                    J'ai configuré les roles pour mon utilisateur dans le fichier role_mapping.yml:

                    # Définir les rôles pour les différents types d'utilisateurs
                    roles:
                      full_access:
                        # Définir les autorisations pour ce rôle
                        indices:
                          "*":
                            "*":
                              - read
                              - index
                              - create
                              - delete
                              - manage
                              - write
                    
                    # Assigner des utilisateurs à des rôles
                    users:
                      "*":
                        roles: [ full_access ]
                      

                    voilà ce que j'obtiens quand je lance la requête suivante pour trouver mon nom de user:

                    curl -X GET "localhost:9200/_cat/nodes?v&h=name,master"

                    name   master

                    node-1 *

                    Rien à faire je ne peut pas insérer de données et cela depuis des semaines.

                    Quelqu'un saurait me dire d'où vient le problème et comment je peux autoriser les methodes PUT et POST sur mon serveur?

                    Merci d'avance pour vos réponses.

                    -
                    Edité par GabrielGatto hier à 10:54

                    • Partager sur Facebook
                    • Partager sur Twitter
                      Hier à 14:42

                      le problème c'est plutôt le chemin d'insertion des données à mon avis, et pas un problème d'autorisation d'accès.

                      comment s'appelle l'index dans lequel tu veux rajouter les données ? c'est ce nom qu'il faut utiliser dans le chemin http://localhost:9200/.....

                      • Partager sur Facebook
                      • Partager sur Twitter

                      elasticsearch

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      • Editeur
                      • Markdown