java - 如何在Java中使用ElasticSearch JSON DSL?

标签 java python spring-boot elasticsearch

我正在做一个springboot项目,并且在ElasticSearch上遇到了一些麻烦。
用户将一些JSON格式的elasticsearch DSL查询字符串放入数据库中,这对我来说是黑盒。我需要做的是获取查询字符串并使用它们,以便在elasticsearch中搜索信息。
在python中,DSL可以是这样的参数:

body = {
   "query":{
      "match_all":{}
  }
}
es.search(index="my_index",doc_type="test_type",body=body)
如何在不知道字符串详细信息的情况下,仅使用Java中的JSON格式查询来执行搜索?

最佳答案

我相信现代ES客户端库中有两种方法可以做到这一点。我自己还没有尝试过,但是第一个似乎很简单。
第一个使用low-level client:

Request request = new Request("POST", "/index/_search");
request.setJsonEntity(jsonString);
Response response = client.performRequest(request);
看起来只要将JSON作为字符串推送到setJsonEntity就足够了,您已经设置好了。
第二个方法是使用high level client,尽管它可以提供更强大的API,但这会很棘手。如您所知,elasticsearch具有XContent的概念,它是对不同格式(包括JSON)的序列化/反序列化。从理论上讲,可以创建JsonXContentParser,然后将其用于实例化SearchSourceBuilder:
SearchSourceBuilder.fromXContent(jsonXContentParser);
问题仅在于JsonXContentParser需要实例化许多参数,而我不确定如何正确创建这些依赖关系。

关于java - 如何在Java中使用ElasticSearch JSON DSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64009320/

相关文章:

java - Android - 锁定所有其他应用程序

java - 我无法从文本字段数字中的数组传递

python - dateutil.parser : how to deal with dd/mm and mm/dd in same column?

spring - 如何使用 RestTemplate 进行 PUT

java - Spring 集成服务激活器不发送空回复

python - Django 的模型字段是在类级别定义的吗?

python - 如何在 Tornado 中删除请求?

java - 如何更改本地主机 :8080 to www. myWebApp.com?

spring-boot - Swagger 的 @ApiResponses 和 @ApiResponses

java - 覆盖仅在 Android 中的前 2 个 GPS 点之间画线