2017-07-27 92 views
0

我在elasticsearch中有一个JSON文件列表。elasticsearch查询 - 两个条件

我有一个字符串列表matching,我想用它作为搜索条件。

其中,matching = ["223232_ds","dnjsnsd_22","2ee2i33","mkddsj2220","23e3efdjn"

我现在需要找到elasticsearch那些记录,两个键包含在这份名单中,matching值。

没有elasticsearch,只需加载JSON作为一个Python对象,我可以做到这一点,如:

results= [] 
for record in JSON_list: 
    if record['key_1'] in matching and record['key_2'] in matching: 
      results.append(record) 

JSON_list看起来是这样的:

[{'key_1' : "blahaksds", 
'key_2' : "njasdnjkns"}, 
{'key_1' : "bladfgfdf", 
'key_2' : "njasdsfsdrr"}] 

如何搜索在多个条件ES?以前,我使用此设置直接搜索record_id。

es = elasticsearch.Elasticsearch() 

name = "so_sample" 

# Formulate query 
query = str("_id:"+'"'+ record_id +'"') 

# Query 
result = es.search(name,q=query) 

回答

0

可以必备子句中使用两个terms queriesbool query,就像这样:

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "terms": { 
      "key_1": ["223232_ds","dnjsnsd_22","2ee2i33","mkddsj2220","23e3efdjn"] 
      } 
     }, 
     { 
      "terms": { 
      "key_2": ["223232_ds","dnjsnsd_22","2ee2i33","mkddsj2220","23e3efdjn"] 
      } 
     } 
     ] 
    } 
    } 
}