Bonjour !

Comme indiqué dans le titre je souhaiterais créer une API en python qui me permettrai de requêter via elasticsearch mes données stockées dans une base CouchDB.
Pour cela j'ai crée une river CouchDB et j'arrive via curl à récupérer le contenu de ma base. Donc la rivière fonctionne bel et bien.
J'ai suivi ce tuto pour en arriver là: https://www.digitalocean.com/communi...untu-13-10-vps


Ce que je voudrais faire c'est une API en python qui me permettrai d'indexer mes données avec elasticsearch puis de les stocker directement dans ma base CouchDB.

Mais comment faire cela ? Je précise que je n'ai que peu d'expérience sur elasticsearch et je n'ai rien trouvé dans la doc si ce n'est la méthode perform_request que je n'arrive apparamment pas à utiliser: http://elasticsearch-py.readthedocs....erform_request


J'ai donc essayé ce petit script en vain:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
from elasticsearch import Elasticsearch
es = Elasticsearch()
 
# La ligne ci dessous ne me retourne rien
es.transport.perform_request(url='/_river/testdb/_meta', method='POST', body={"name": "My Name 5"})
 
# Les lignes ci dessous créer bien des index récupérables via la river mais ne stockent rien dans CouchDB
es.transport.perform_request('POST', '/testdb/testdb/', body={"search_request": "toto"}) 
es.transport.perform_request('POST', '/testdb/testdb/20', body={"designation": "tintin"})
Pour preuve lorsque je visualise ce que me retourne la river via un navigateur web j'obtient ceci:
(url = http://127.0.0.1:9200/testdb/testdb/_search?pretty=true)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 6,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "testdb",
      "_type" : "testdb",
      "_id" : "4",
      "_score" : 1.0,
      "_source":{"_rev":"1-7e9376fc8bfa6b8c8788b0f408154584","_id":"4","name":"My Name 4"}
    }, {
      "_index" : "testdb",
      "_type" : "testdb",
      "_id" : "1",
      "_score" : 1.0,
      "_source":{"_rev":"1-025ca2e8a48b91d98530daf5c29babe4","_id":"1","name":"My Name 1"}
    }, {
      "_index" : "testdb",
      "_type" : "testdb",
      "_id" : "20",
      "_score" : 1.0,
      "_source":{"designation": "tintin"}
    }, {
      "_index" : "testdb",
      "_type" : "testdb",
      "_id" : "2",
      "_score" : 1.0,
      "_source":{"_rev":"1-194582c1e02d84ae36e59f568a459633","_id":"2","name":"My Name 2"}
    }, {
      "_index" : "testdb",
      "_type" : "testdb",
      "_id" : "unUG32LvTuSgR_J0gMtOPg",
      "_score" : 1.0,
      "_source":{"search_request": "toto"}
    }, {
      "_index" : "testdb",
      "_type" : "testdb",
      "_id" : "3",
      "_score" : 1.0,
      "_source":{"_rev":"1-62a53c50e7df02ec22973fc802fb9fc0","_id":"3","name":"My Name 3"}
    } ]
  }
}
J'ai utiliser cette requête pour créer la rivière:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
curl -X PUT '127.0.0.1:9200/_river/testdb/_meta' -d '{ "type" : "couchdb", "couchdb" : { "host" : "localhost", "port" : 5984, "db" : "testdb", "filter" : null }, "index" : { "index" : "testdb", "type" : "testdb", "bulk_size" : "100", "bulk_timeout" : "10ms" } }'
Comment pourrais donc stocker mes données dans CouchDB tout en les indexant en même temps et ensuite faire mes requêtes via elasticsearch ?
Comment faire une telle API ?

Je vous serait reconnaissant de bien vouloir m'aider