2016-05-31 3 views
1

записей, хранящихся в Elasticsearch:И запрос в elasticsearch питона

"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} 
    } ] 

Нам нужно найти те записи, в которых действует верно и action_taken ложна питон скрипт, используя elasticsearch пакет питона.

Мы пытаемся сделать то же самое с помощью

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

Однако на исполнение, он возвращает все записи. Есть ли способ сделать то же самое с помощью поиска.

PS: Я пытаюсь написать вызов API, который ищет записи на основе условия поиска, предоставленного как данные json в запросе.

ответ

1

Запрос, который вы отправляете в ElasticSearch, не похож на действительный запрос. ES требует запросы должны быть отформатированы определенным образом:

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

Основываясь на этом, я считаю, ваша потребность изменить q параметров.

Для ElasticSearch pre 2.x запрос должен использовать параметры filtered и filter. Строка запроса больше похожа на запросы SQL, так and, or фильтры доступны (docs):

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

Начиная ElasticSearch 2.3, то and запрос является устаревшим, и bool предлагается вместо:

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

Here is the link to the 2.3 docs

Надеюсь, это поможет. Дай мне знать.

+0

Так что нам нужно передать весь предложенный выше json в качестве параметра запроса в функции поиска es. 'Resp = ES.search (index = 'test', doc_type = 'test_doc', query = ') – user3351750

+0

Это работает используя 'resp = ES.search (index = 'test', doc_type = 'test_doc', body = )' – user3351750