【问题标题】:Elasticsearch java api for full text search with filtersElasticsearch java api 用于带过滤器的全文搜索
【发布时间】:2016-11-06 08:29:49
【问题描述】:

我想对字符串“user”进行全文搜索,该字符串可以匹配我文档中的任何字段,然后应用过滤器,以便我只获得 x 字段的值为“abc”或“xyz”的记录。

摆弄 Sense ,以下请求满足我的要求。

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

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

但是,我想要一个 java api 来完成上述工作。我已经搜索了弹性文档和 SO,但没有找到我正在寻找的东西,因为 QueryBuilders.filteredQuery 之类的 API 似乎已被弃用。我目前使用的是 2.3.4,但可以升级。

【问题讨论】:

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


【解决方案1】:

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")));

这个查询相当于上面提到的那个。希望这会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2016-05-27
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2014-03-12
    相关资源
    最近更新 更多