2016-04-02 2 views
1

Я использую Python, Elasticsearch DSL пакет: http://elasticsearch-dsl.readthedocs.org/en/latest/search_dsl.htmlPython Elasticsearch значение DSL запрос из списка

Мой пример записи elasticsearch выглядит следующим образом:

{ 
    "_index" : "users", 
    "_type" : "player", 
    "_id" : "1", 
    "_version" : 5, 
    "found" : true, 
    "_source":{"doc": {"weight": 92, "height": 184, "gender": "male", "firstname": "John", "lastname": "Smith", "age": 31, "country": "France"}} 

, и я стараюсь, чтобы извлечь все записи, которые firstname = "John*" страны в списке [France, Australia]. Вот мой код:

firstname = 'John' 
s = Search(index='users').using(elasticsearch) 
must = [ 
    {'match': {'doc.firstname': {'query': firstname + '*', 'boost': 2}}}, 
    {'terms': {'doc.country': [u'France', u'Australia']}}] 

s = s.query(Q('bool', must=must)) 
response = s.execute() 

Он возвращает пустые результаты, что я делаю неправильно? Я пользуюсь этим предложением: Elasticsearch match list against field

Я новичок в Elasticsearch, все еще немного смущенный тем, где мы используем запрос против фильтра.

ответ

1

Я использовал должен Param для этого вместо:

firstname = 'John' 
s = Search(index='users').using(elasticsearch) 
must = [ 
    {'match': {'doc.firstname': {'query': firstname + '*', 'boost': 2}}}] 

should = [] 
for country in countries: 
    should.append({'match': {'doc.country': country}}) 

s = s.query(Q('bool', must=must, should=should, minimum_should_match=1)) 
response = s.execute()