如何在Java中使用ElasticSearch JSON DSL?

2024-10-16 20:39:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从事一个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格式查询


Tags: 项目字符串用户信息数据库jsonindex格式
1条回答
网友
1楼 · 发布于 2024-10-16 20:39:42

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

相关问题 更多 >