2017-03-24 3 views
0

mag ich versuchen und verwenden elasticsearch_dsl mit Python für die folgendenVerwendung von Python elastisearch_dsl mit verschachtelten Objekten

import elasticsearch 

es_server = 'my_server_name' 
es_port = '9200' 
es_index_name = 'my_index_name' 
es_connection = Elasticsearch([{'host': es_server, 'port': es_port}]) 

es_query = '{"query":{"bool":{"must":[{"term":{"data.party.fullName":"john do"}}],"must_not":[],"should":[]}},"from":0,"size":1,"sort":[],"facets":{}}' 
my_results = es_connection.search(index=es_index_name, body=es_query) 
print my_results 

es_query ='{"query": {"nested" : {"filter" : {"term" : {"party.phoneList.phoneFullNumber" : "4081234567"}},"path" : "party.phoneList"}},"from" :0,"size" : 1}'; 
my_results = es_connection.search(index=es_index_name, body=es_query) 
print my_results 

Ich bin in der Lage, die erste Abfrage zu erhalten, aber bin nicht sicher, auf dem zweiten

from elasticsearch import Elasticsearch 
from elasticsearch_dsl import Search, Q 

client = Elasticsearch('my_server:9200') 
s = Search(using=client, index = "my_index").query("term",fullName="john do ") 
response = s.execute() 
print response 

Nicht sicher, wie die Abfrage unter Verwendung von DSL für das verschachtelte Objekt party.phoneList.phoneFullNumber

Neu zu ES und damit konnte nicht herausfinden, wie die verschachtelten Objekte zu tun. Ich sah https://github.com/elastic/elasticsearch-dsl-py/issues/28 und konnte nicht ganz herausfinden.

Danke!

Antwort

1

Verwenden Sie einfach __ statt . um Pythons Einschränkungen zu erhalten und die nested Abfrage:

s = Search(using=client, index = "my_index") 
s = s.query("nested", 
    path="party.phoneList", 
    query=Q("term", party__phoneList__phoneFullNumber="4081234567") 
) 
Verwandte Themen