2013-04-15 116 views
1

您好我對elasticsearch很新,在這裏我有一個彈性搜索,它返回基於關鍵字的數據庫中的所有用戶,但在這裏我只需要獲取其活動狀態爲true但現在我正在獲取所有用戶列表。如何在elasticsearch中添加where子句

蔭越來越searchbuilder像

{ 
    "from" : 0, 
    "size" : 30, 
    "query" : { 
     "query_string" : { 
      "query" : "*jhon*", 
      "default_field" : "_all" 
     } 
    }, 
    "sort" : [ 
     { 
      "id" : { 
       "order" : "desc" 
      } 
     } 
    ] 
} 

我使用像「*」 + JHON +「*」查詢,但是我需要得到像名JHON和他的工作狀態是真實的,所以我有嘗試過的用戶「*」+ jhon +「*」#activated〜true「但是我沒有得到想要的結果不知道我要去哪裏嗎?

+0

我可以知道我的答案是否有幫助嗎? – javanna

+0

是的,它幫助了我 –

回答

3

最好在您的查詢中添加一個過濾器。它們不涉及任何評分並被緩存,可以使用不同的過濾器,彈性搜索查詢DSL非常靈活。過濾器取決於您爲數據建立索引的方式,這取決於您的數據。我將假設最簡單的possbile解決方案:term filter。看看下面的例子。

{ 
    "from" : 0, 
    "size" : 30, 
    "query" : { 
     "query_string" : { 
      "query" : "*jhon*", 
      "default_field" : "_all" 
     } 
    }, 
    "filter" : { 
     "term" : { 
      "activated" : "true" 
     } 
    }, 
    "sort" : [ 
     { 
      "id" : { 
       "order" : "desc" 
      } 
     } 
    ] 
} 

請注意,在搜索時有不同的方式來應用過濾器。在我的示例中,我應用了頂級過濾器,該過濾器僅適用於搜索結果,而不適用於各個方面。如果你希望它也適用於方面,你應該看看filtered query;不是添加過濾器,而是將當前查詢包裝到新的過濾查詢中,該查詢也可以包含相同的術語過濾器。