如何使用Elasticsearch中的BoolQueryBuilder查询数据?

时间:2019-12-17 09:44:10

标签: elasticsearch

我需要在某些条件下从aws elasticsearch查询一些数据。

我使用BoolQueryBuilder

参数是关于pretty = true

这是我的代码:

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
QueryBuilder qb1 = QueryBuilders.matchQuery("personId", personId);
boolQueryBuilder.must(qb1);
sourceBuilder.query(boolQueryBuilder);
result = searchUtil.getResult(params, sourceBuilder);

以下是错误消息

{
  "error" : {
    "root_cause" : [
      {
        "type" : "parsing_exception",
        "reason" : "Unknown key for a START_OBJECT in [queryBuilder].",
        "line" : 1,
        "col" : 17
      }
    ],
    "type" : "parsing_exception",
    "reason" : "Unknown key for a START_OBJECT in [queryBuilder].",
    "line" : 1,
    "col" : 17
  },
  "status" : 400
}

有人可以帮忙吗?!请!

1 个答案:

答案 0 :(得分:1)

不确定代码中result = searchUtil.getResult(params, sourceBuilder);的用途。

您可以阅读this官方ES文档,以使用正在使用的查询构建器来构建查询,也可以参考this官方ES示例来构建查询。

这很简单,我想您出错的原因是(由于没有完整的信息)您正在使用其他实用程序来获取无法处理JSON的结果。

编辑:添加了使用Elasticsearch的Java高级rest-client版本7.4在本地工作的代码。

    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
    QueryBuilder qb1 = QueryBuilders.matchQuery("personId", "kimchy");
    boolQueryBuilder.must(qb1);
    sourceBuilder.query(boolQueryBuilder);
    //String searchJson = sourceBuilder.toString(); // if you want to print search json for debugging
    SearchRequest searchRequest = new SearchRequest(indexName);// your index name
    searchRequest.source(sourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

请注意,最后三行代码非常重要,代码中缺少这三行代码,它们用于通过查询创建搜索请求,并实际上使用ES客户端触发此搜索请求并获取结果。