2014-10-29 131 views
0

我试图做这样的事情:Elasticsearch和查询

SELECT * FROM x WHERE __account_id = 5 AND __import_id IN [1,2,3] 

这里是我的ES查询:

body = { 
    "query": { 
     "filtered" : { 
      "filter" : { 
       "term" : { 
        "__account_id" : account.id, 
        "__import_id": [x['id'] for x in ingested_imports] 
       } 
      } 
     } 
    } 
} 

结果似乎只过滤在__account_id但不是__import_id。我究竟做错了什么?

回答

1

您需要在bool查询中包装termterms过滤器,因为两个子句必须匹配。

{ 
    "query":{ 
    "filtered":{ 
     "filter":{ 
     "bool":{ 
      "must":[ 
      { 
       "term":{ 
       "__account_id":5 
       } 
      }, 
      { 
       "terms":{ 
       "__import_id":[1, 2, 3] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

这是有道理的。我只注意到它使用我的python客户端正常工作,但不能从kopf工作。不确定那是关于什么的。 – hanleyhansen 2014-10-29 22:27:47