Elasticsearch java api用于使用过滤器进行全文搜索

时间:2016-11-06 08:29:50

标签: java elasticsearch elasticsearch-2.0 elasticsearch-java-api

我想对字符串" 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但可以升级。

1 个答案:

答案 0 :(得分:0)

Elasticsearch 2.x java Api没有针对过滤查询的实现。根据elasticsearch文档,他们建议use the bool query instead with a must clause for the query and a filter clause for the 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")));

此查询等同于上面提到的查询。希望这有帮助