2015-03-25 1 views
7

Ich habe gerade auf Elastic Search 1.5.0 aktualisiert und bis jetzt kann ich inner_hits nicht mit einem geschachtelten Filter arbeiten, obwohl es gut mit einer geschachtelten Abfrage funktioniert.Innere Treffer funktionieren nicht mit verschachtelten Filtern?

Sagen wir, ich die innere verschachtelte Objekt Schauspieler innerhalb eines Film Objekt abrufen möchten.

Wenn ich die folgende verschachtelte Abfrage:

Syntax 1

GET my_index/movie/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
     "nested": { 
      "path": "actors", 
      "query": { 
      "match": { 
       "actors.id": 12345 
      } 
      }, 
      "inner_hits" : {} 
     } 
     } 
    } 
    } 
} 

=> Ich erhalte die inner_hits als here dokumentiert, was ganz gut ist.

aber wenn ich versuche zu tun, die äquivalente Abfrage mit einem verschachtelten Filter:

Syntax 2

GET my_index/movie/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
     "nested": { 
      "path": "actors", 
      "filter": { 
      "term": { 
       "actors.id": 12345 
      } 
      }, 
      "inner_hits" : {} 
     } 
     } 
    } 
    } 
} 

=> Ich erhalte den folgenden Parse-Fehler

QueryParsingException [ [my_index] [nested] benötigt entweder 'query' oder 'filter' Feld

(und die letzte Abfrage funktioniert gut, wenn ich inner_hits entfernen - außer natürlich, dass ich ... nicht die inneren Treffer erhalten)

Gibt es etwas falsch in der Syntax verwende ich oder ist die inner_hits noch nicht mit verschachtelten Filter implementiert?

Vielen Dank im Voraus

bearbeiten 3-30-2015

Es mit der Syntax arbeitet unter provided by @mdewit (danke!)

Syntax 3

GET my_index/movie/_search 
{ 
    "query": { 
     "nested": { 
      "path": "actors", 
      "query": { 
       "filtered": { 
        "filter": { 
         "term": {"actors.id": 12345} 
        } 
       } 
      }, 
      "inner_hits" : {} 
     } 
    } 
} 

, obwohl diese Syntax nicht mit der 012 übereinstimmt

=> Ich verstehe immer noch nicht, was mit Syntax 2 falsch ist. Es scheint wie ein ES-Fehler für mich.

bearbeiten 2015.04.22: bug in ES 1.5.1 festgelegt, siehe meinen Kommentar unten

Antwort

2

Bug in Elasticsearch 1,5 fixiert.1 als here angegeben

Also diese Syntax funktioniert (und funktioniert gut)

GET my_index/movie/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
     "nested": { 
      "path": "actors", 
      "filter": { 
      "term": { 
       "actors.id": 12345 
      } 
      }, 
      "inner_hits" : {} 
     } 
     } 
    } 
    } 
} 

Danke Jungs!

5

Das scheint folgendes zu arbeiten:

GET my_index/movie/_search 
{ 
    "query": { 
     "nested": { 
      "path": "actors", 
      "query": { 
       "filtered": { 
        "filter": { 
         "term": {"actors.id": 12345} 
        } 
       } 
      }, 
      "inner_hits" : {} 
     } 
    } 
}' 
+0

Ja, es funktioniert, danke dafür! Trotzdem werde ich die Frage offen lassen, da die von Ihnen angegebene Syntax nicht genau der ist, die in der offiziellen Nested-Filter-Dokumentation beschrieben wird: http://www.elastic.co/guide/en/elasticsearch/reference/1.x/ query-dsl-nested-filter.html Ich denke immer noch, dass etwas falsch in der Fehlermeldung ist, die ich von ES in dem Beispiel bekomme, das ich – benoit

+0

zur Verfügung stellte, das wirklich arbeitet. –

Verwandte Themen