2014-01-18 121 views
18

我对Elasticsearch相当陌生,所以这里是我的问题。 我想用elasticsearch做一个搜索查询,并想用多个词条过滤。Elasticsearch多项过滤器

如果我想搜索一个用户'tom',那么我想要所有匹配的用户'isActive = 1','isPrivate = 0'和'isOwner = 1'。

这里是我的搜索查询

"query":{ 
    "filtered": { 
     "query": { 
      "query_string": { 
       "query":"*tom*", 
       "default_operator": "OR", 
       "fields": ["username"] 
      } 
     }, 
     "filter": { 
      "term": { 
       "isActive": "1", 
       "isPrivate": "0", 
       "isOwner": "1" 
      } 
     } 
    } 
} 

当我使用2点而言,它就像一个魅力,但是当我使用3个学期没有。

感谢您的帮助!

回答

41

您应该使用bool filterAND所有条款:

"query":{ 
    "filtered": { 
     "query": { 
      "query_string": { 
       "query":"*tom*", 
       "default_operator": "OR", 
       "fields": ["username"] 
      } 
     }, 
     "filter": { 
      "bool" : { 
       "must" : [ 
        {"term" : { "isActive" : "1" } }, 
        {"term" : { "isPrivate" : "0" } }, 
        {"term" : { "isOwner" : "1" } } 
       ] 
      } 
     } 
    } 
} 
+12

这完全取决于一周elasticsearch您正在使用的次要版本。月相也可能产生影响。与唐纳德特朗普冒犯移民相比,这样做的语法改变了更多次。 –

+0

我想知道为什么弹性版本之间存在这种不一致。 –

+0

非常感谢这个答案真的帮助我。 –