2016-04-17 18 views
0

Eine neue Frage zu elasticsearch-py api. Ich baute einen Index von Datensätzen von Name, Adresse, Telefonnummer usw. und ich kann mit dem Python-Client zB abfragen.Elasticsearch dynamische Abfrage erstellen - Python

`elasticsearch.search(index = "index_name", q= 'first_name:"JOHN"')` 

und nutzen Sie die entsprechenden Ergebnisse Allerdings habe ich die Abfragen als String-Parameter

first_name = "JOHN" 
qu = "first_name:".join(first_name) 
elasticsearch.search(index = 'index_name', q = qu) 

und die Abfrage nicht machen wollen. Gibt es eine bessere Möglichkeit, diese Art von dynamischen Abfragen zu erstellen?

Antwort

0

Ich werde in der Regel die Suchabfrage als eine Anfrage Bodysuche aus. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html

Beispiel unten:

searchdata = essearch.search(index=indexname, body= { 
    "query": { 
     "filtered": { 
      "query": { 
      "query_string": { 
       "query": "name:fred" 
      } 
      }, 
      "filter": { 
      "bool": { 
       "must": [ 

       { 
        "exists": { 
        "field": "fieldname" 
        } 
       }, 
       { 
        "exists": { 
        "field": "secondfieldname" 
        } 
       } 

       ] 
      } 
      } 
     } 
     }, 
     "size": 5000, 
     "sort": [ 
     { 
      "loggeddate": { 
       "order": "desc" 
      } 
     } 
     ] 
    } 
      ) 
0

Haben Sie versucht, das Auspacken eines dict wie:

myDict = { "Vorname ": Vorname} elasticsearch.search (Index = ‚index_name", ** myDict)

Oder auch:

myDict = { "Index": "index_name", "Vorname": Vorname} elasticsearch.search (** myDict)

myDict beliebige Taste haben kann - Wertepaar Sie benötigen

Wert ist der Versuch