java - Elasticsearch java api 用于带过滤器的全文搜索

标签 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这样的api似乎已被弃用。我目前使用的是 2.3.4,但可以升级。

最佳答案

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

该查询与上面提到的查询等效。希望这有帮助

关于java - Elasticsearch java api 用于带过滤器的全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40447371/

相关文章:

java - 表格每一行的编辑链接都会将该行的主键发送到 Controller

java - Thread.sleep 导致 ExecutorService 循环中发生意外行为

elasticsearch - 路径层次标记上的聚合

elasticsearch - 处理空字段

elasticsearch - 如何在 elasticsearch 2.0 中设置 _id

java - 为什么 jvm 中的默认 hashCode 生成在 JDK 8 中切换为 xor-shift?

java - 如何编写一个 [递归?] 函数来迭代 JMenu 层次结构中的(子)MenuElements?

elasticsearch - 对具有一定日期范围的索引进行 Elasticsearch 查询

elasticsearch - 聚合后的Elasticsearch排序日期

c# - ElasticSearch 索引映射和通配符