0

I'm inserting documents into elasticsearch and trying to sort on a given field that's present in all documents. However, whenever I update a document, indexing seems to break and I do not get a sorted order. I have created an index by doing:

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

For instance, I would like to sort on a "_ts" field. Given the following dictionaries and code:

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

I would expect to get an ordering of "Ringo, John, Paul" but instead get an ordering of "John, Paul, Ringo". Any reason why this might be the case? I see there's a bug here: https://github.com/elasticsearch/elasticsearch/issues/3078 But that seems to affect ES .90.0 and I'm using .90.1.

the_man_slim
  • 1,155
  • 2
  • 11
  • 18

1 Answers1

1

It should be:

sort={"_ts":"desc"}
LtWorf
  • 7,286
  • 6
  • 31
  • 45