簡體   English   中英

Elasticsearch java api用於使用過濾器進行全文搜索

[英]Elasticsearch java api for full text search with filters

我想對字符串“user”進行全文搜索,它可以匹配我文檔中的任何字段,然后應用過濾器,這樣我只得到x feild值為“abc”或“xyz”的記錄。

擺弄Sense,以下要求符合我的要求。

GET _search
{
   "query":{
      "filtered":{
         "query":{
             "query_string": {
                 "query": "user"
         }
         },
         "filter":
             [

                    {"term": { "x": "abc"}},
                     {"term": { "x": "xyz"}}              
            ]    
      }
   }
}

但是,我想要一個java api來做上面的事情。 我已經搜索了彈性文檔和SO,但是沒有找到我想要的內容,就像QueryBuilders.filteredQuery似乎已棄用。 我目前正在使用2.3.4但可以升級。

Elasticsearch 2.x java Api沒有針對篩選查詢的實現。 根據elasticsearch文檔,他們建議使用bool查詢,而不是查詢的must子句和過濾器的filter子句。

在java中,您可以創建一個方法來為篩選的查詢創建包裝器方法。 這就像:

   public static QueryBuilder filteredQuery(QueryBuilder query, QueryBuilder filter){
        BoolQueryBuilder filteredQuery = QueryBuilders.boolQuery().must(query);
        return filteredQuery.filter(filter);

    }

哪里,

QueryBuilder query = QueryBuilders.queryStringQuery("user");
QueryBuilder filter = QueryBuilders.boolQuery().filter(QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("x", "abc", "xyz")));

此查詢等同於上面提到的查詢。 希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM