2014-01-18 155 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

非常感謝這個答案真的幫助我。 –