2016-05-31 12 views
1

in Elasticsearch gespeicherten Datensätze:UND Abfrage in Elasticsearch Python

"hits" : [ { 
     "_index" : "test", 
     "_type" : "test_doc", 
     "_id" : "AVUHBSESPB1nLi5k2Dxp", 
     "_score" : 1.0, 
     "_source":{"valid": true,"action_taken": false} 
    }, { 
     "_index" : "test", 
     "_type" : "test_doc", 
     "_id" : "AVUHBI1IPB1nLi5k2Dxo", 
     "_score" : 1.0, 
     "_source":{"valid": true,"action_taken": false} 
    }, { 
     "_index" : "test", 
     "_type" : "test_doc", 
     "_id" : "AVUHWFipPB1nLi5k2Dxu", 
     "_score" : 1.0, 
     "_source":{"valid": false,"action_taken": false} 
    } ] 

Wir müssen die Datensätze, deren gültig ist wahr und action_taken finden, ist falsch in Python-Skript Python-Paket mit Elasticsearch.

Wir versuchen, das gleiche zu tun

resp = ES.search(index='test', doc_type='test_doc', q='action_taken:0 valid:1) 

jedoch bei der Ausführung verwendet wird, es alle Datensätze zurückgibt. Gibt es eine Möglichkeit, das gleiche mit der Suche zu tun.

PS: Ich versuche, einen API-Aufruf zu schreiben, der die Datensätze basierend auf der Suchbedingung sucht, die in der Anforderung als JSON-Daten bereitgestellt wird.

Antwort

1

Die Anforderung, die Sie an ElasticSearch senden, sieht nicht wie eine gültige Abfrage aus. ES-Abfragen erfordert in einer bestimmten Art und Weise formatiert werden:

"query": { 
    "match": { 
     "content": term 
    } 
} 

auf dieser Grundlage, glaube ich, Ihre Notwendigkeit, die q param zu ändern.

Für ElasticSearch vor sollte die Abfrage die Optionen filtered und filter verwenden. Der Query-String ist ähnlich wie die SQL-Abfragen, so and, or Filter stehen zur Verfügung (docs):

"query": { 
    "filtered": { 
     "filter": { 
      "and": [ 
       {"term": { "action_taken": 0 }}, 
       {"term": { "valid": 0 }} 
      ] 
     } 
    } 
} 

Ab Elasticsearch 2.3, die and Abfrage ist veraltet, und bool wird stattdessen vorgeschlagen:

"query": { 
    "bool": { 
     "must": [ 
      {"term": { "action_taken": 0 }}, 
      {"term": { "valid": 0 }} 
     ] 
    } 
} 

Here is the link to the 2.3 docs

Hoffe das hilft. Gib mir Bescheid.

+0

Also müssen wir den gesamten oben vorgeschlagenen JSON als Abfrageparameter übergeben in der es Suchfunktion Aufruf 'resp = ES.search (index = 'test', doc_type = 'test_doc', query = ') – user3351750

+0

Es funktioniert mit 'resp = ES.search (index = 'test', doc_type = 'test_doc', body = )' – user3351750