我正在做一个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/