elasticsearch - WrapperQueryBuilder-aggs查询引发查询格式错误的异常

标签 elasticsearch jest

我有一个Json查询字符串:
"\"query\":{\"match_all\": {}},\"aggs\":{\"avg1\":{\"avg\":{\"field\":\"age\"} } }";
通过Jest Client执行查询时,聚合值可用。

但是,当此查询转换为查询生成器(WrapperQueryBuilder)对象时,将收到以下异常。

; nested: QueryParsingException[[st1index] [_na] query malformed, must start with start_object]; }{[ixJ-6RHNR5C6fC7HfJHqaw][st1index][4]: SearchParseException[[st1index][4]: from[-1],size[-1]: Parse Failure [Failed to parse source [{
  "query" : {
    "wrapper" : {
      "query" : "InF1ZXJ5Ijp7Im1hdGNoX2FsbCI6IHt9fSwiYWdncyI6eyJhdmcxIjp7ImF2ZyI6eyJmaWVsZCI6ImFnZSJ9IH0gfQ=="
    }
  }
}]]]; nested: QueryParsingException[[st1index] [_na] query malformed, must start with start_object]; }]

我该如何解决?

编辑1:代码分析:
添加了代码分析详细信息:
    public static void main(String[] args) throws Exception 
{
try{
    //Jest client building
            JestClientFactory factory = new JestClientFactory();
            HttpClientConfig config = new HttpClientConfig.
                    Builder("http://localhost:9201")
                    .connTimeout(10000)
                    .readTimeout(10000)
                    .multiThreaded(true).build();

            factory.setHttpClientConfig(config);
            JestClient jestClient = factory.getObject();

            String query ="{\"query\":{\"match_all\": {}},\"aggs\":{\"avg1\":{\"avg\":{\"field\":\"age\"} } }}";
             String query2 ="{\"match_all\": {}},\"aggs\":{\"avg1\":{\"avg\":{\"field\":\"age\"} } }}";

            WrapperQueryBuilder wrapQB = new WrapperQueryBuilder(query2);
            SearchSourceBuilder ssb = new SearchSourceBuilder();
            ssb.query(wrapQB);

//working code commented
            //   Search.Builder searchBuilder = new Search.Builder(query).addIndex("st1index").addType("st1type");

//code which needs to be fixed
            Search.Builder searchBuilder = new 
Search.Builder(ssb.toString()).addIndex("st1index").addType("st1type");
            SearchResult result = jestClient.execute(searchBuilder.build());
            System.out.println(result.getJsonString());
            }
            catch(Exception e)
            {
                System.out.println("inside exception block");
                e.printStackTrace();
            }

        }

使用字符串查询和带有注释的SearchSourceBuilder时,将显示aggs结果。但是通过使用WrapperQueryBuilder,无法检索aggs结果

最佳答案

您快到了,您只不过缺少括号了:

"{\"query\":{\"match_all\": {}},\"aggs\":{\"avg1\":{\"avg\":{\"field\":\"age\"}}}}";
 ^                                                                               ^
 |                                                                               |
this one...                                                         ...and this one

更新

WrapperQueryBuilder中,您只能传递query部分的内容,而不能传递aggregations部分。您需要像这样直接在SearchSourceBuilder上添加聚合部分:
SearchSourceBuilder ssb = new SearchSourceBuilder();

// add the query part
String query ="{\"match_all\": {}}";
WrapperQueryBuilder wrapQB = new WrapperQueryBuilder(query);
ssb.query(wrapQB);

// add the aggregation part
AvgBuilder avgAgg = AggregationBuilders.avg("avg1").field("age");
ssb.aggregation(avgAgg);

关于elasticsearch - WrapperQueryBuilder-aggs查询引发查询格式错误的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34261477/

相关文章:

elasticsearch - 如何使用NEST搜索文本字段 “as is”?

elasticsearch - Grafana与Elasticsearch-设置按平均值分组时不显示数据

elasticsearch - Elasticsearch:请求[/some index/_refresh]包含无法识别的参数:[refresh]

spring - JHipster-使用来自Elasticsearch的API调用对实体进行动态过滤-如何以适当的方式使用angular5实现它?

elasticsearch - 标准分词器在哪些字符上定界?

elasticsearch - Elasticsearch 中的相对词匹配

elasticsearch - 如何在 Jest 中传递多个节点地址(Elasticsearch)

elasticsearch - 如何使用Jest客户端一次从Elasticsearch一次获取一万多个文档

elasticsearch - Jest 客户端大小参数被忽略