2013-06-14 8 views
0

J'insère des documents dans elasticsearch et essaye de trier un champ donné présent dans tous les documents. Cependant, chaque fois que je mets à jour un document, l'indexation semble se casser et je n'obtiens pas un ordre trié. Je l'ai créé un index en faisant:Le tri Elasticsearch échoue après la mise à jour/insertion

self.conn = ES(server=url) 
self.conn.create_index("test.test") 

Par exemple, je voudrais trier sur un champ « _TS ». Compte tenu des dictionnaires et du code ci-dessous:

def update_or_insert(doc): 
    doc_type = "string" 
    index = doc['ns'] 
    doc['_id'] = str(doc['_id']) 
    doc_id = doc['_id']   
    self.conn.index(doc, index, doc_type, doc_id) 

to_insert = [ 
    {'_id': '4', 'name': 'John', '_ts': 3, 'ns':'test.test'}, 
    {'_id': '5', 'name': 'Paul', '_ts': 2', ns':'test.test'}, 
    {'_id': '6', 'name': 'George', '_ts': 1', ns':'test.test'}, 
    {'_id': '6', 'name': 'Ringo', '_ts': 4, 'ns':'test.test'} , 
] 

for x in to_insert: 
    update_or_insert(x) 

result = self.conn.search(q, sort={'_ts:desc'})  
for it in result: 
    print it 

Je vous attendre à obtenir un ordre de "Ringo, John, Paul", mais plutôt obtenir un ordre de "John, Paul, Ringo". Une raison pour laquelle cela pourrait être le cas? Je vois qu'il y a un bug ici: https://github.com/elasticsearch/elasticsearch/issues/3078 Mais cela semble affecter ES .90.0 et j'utilise .90.1.

Répondre

1

Il devrait être:

sort={"_ts":"desc"} 
Questions connexes