【问题标题】:How to use ElasticSearch JSON DSL in Java?如何在 Java 中使用 ElasticSearch JSON DSL?
【发布时间】:2020-09-22 12:00:58
【问题描述】:

我正在开发一个 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 格式查询来执行搜索?

【问题讨论】:

    标签: java python spring-boot elasticsearch


    【解决方案1】:

    我相信在现代 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 需要实例化多个参数,我不确定如何正确创建这些依赖项。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 2021-07-07
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多