2016-12-25 1 views
2

Ich habe eine Abfrage, die auf einen Datumsbereich und Term filtert, wählt N Dokumente beginnend bei "von" Position 0 und dann sortiert sie. Ich möchte jedoch, dass die Sortierung unmittelbar nach dem Filtern erfolgt, bevor N Dokumente ausgewählt werden.Elasticsearch - wie man Größe nach Sortierung anwendet

Meine Frage:

{ 
    'filter': { 
     'and': [ 
      { 
       'range': { 
        'updated_at': { 
         'lte': 1482652799999, 
         'gte': 1481961600000 
        } 
       } 
      }, 
      { 
       'term': {'name': 'my name'} 
      } 
     ] 
    }, 
    'sort': [ 
     'updated_at', {'updated_at': 'desc'} 
    ], 
    'size': 3, 
    'from': 0 
} 

Diese Abfrage gibt mir: Charge 1 = [12/17, 12/17, 12/15] und die "von" Wert erhöhen, Charge 2 = [12/21, 12/20, 12/18],

aber ich will: Charge 1 = [12/21, 12/20, 12/18] und Charge 2 = [12/17, 12/17, 12/15].

Antwort

0

Es sollte die Sortierung vor Filter anwenden. Versuchen Sie, Ihren Filter in eine Abfrage oder zumindest den Begriff Teil zu konvertieren. Es sollte als Abfrage, Sortierung, Filter ausgeführt werden.

0

Das Problem mit der Abfrage identifiziert. ES akzeptiert 2 Arten von Sortierformaten - ein Beispiel aus ihrer docs (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html):

"sort" : [ 
    { "post_date" : {"order" : "asc"}}, 
    "user", 
    { "name" : "desc" }, 
    { "age" : "desc" }, 
    "_score" 
] 

Meine Anfrage versagt wurde, weil es die falsche Syntax (siehe "sort" Taste unten) hatte:

{ 
    'filter': { 
     'and': [ 
      { 
       'range': { 
        'updated_at': { 
         'lte': 1482652799999, 
         'gte': 1481961600000 
        } 
       } 
      }, 
      { 
       'term': {'name': 'my name'} 
      } 
     ] 
    }, 
    'sort': {'updated_at': 'desc'} # vs ['updated_at', {'updated_at': 'desc'}] 
    'size': 3, 
    'from': 0 
} 
Verwandte Themen