java - 如何在 Java 中使用 ElasticSearch JSON DSL?
问题描述
我正在开发一个 springboot 项目,并且在使用 ElasticSearch 时遇到了一些问题。用户会将一些 JSON 格式的 elasticsearch DSL 查询字符串放入数据库中,它们对我来说是黑盒。我需要做的是获取查询字符串并使用它们,以便在弹性搜索中搜索信息。
在 python 中,DSL 可以是这样的参数:
body = {
"query":{
"match_all":{}
}
}
es.search(index="my_index",doc_type="test_type",body=body)
如何在不知道字符串详细信息的情况下仅使用 Java 中的 JSON 格式查询来执行搜索?
解决方案
我相信在现代 ES 客户端库中有两种方法可以做到这一点。我自己没有尝试过,但第一个似乎很简单。
第一个是使用低级客户端:
Request request = new Request("POST", "/index/_search");
request.setJsonEntity(jsonString);
Response response = client.performRequest(request);
似乎只需将 JSON 作为字符串推送到 setJsonEntity 中就足够了,而且您已经设置好了。
第二个是使用高级客户端,虽然它可以提供更强大的API,但这会变得很棘手。您可能知道,elasticsearch 有 XContent 的概念,它是对不同格式的序列化/反序列化,包括 JSON。理论上,可以创建 JsonXContentParser,然后可以使用它来实例化 SearchSourceBuilder:
SearchSourceBuilder.fromXContent(jsonXContentParser);
问题只是 JsonXContentParser 需要实例化多个参数,我不确定如何正确创建这些依赖项。
推荐阅读
- angular - 是否可以防止提交按钮刷新页面?(角度 6,打字稿)
- dart - 如何从 redux_epic 调用错误操作?
- python - 巴特沃斯滤波器不能改善我的神经信号
- reporting-services - 在没有 Reporting Services 的情况下安装 TFS 2018
- visual-studio-2015 - Visual Studio:Windows 10 模拟器未启动
- r - 尝试遍历不同的工作目录
- javascript - 在wordpress中嵌入脚本iframe不显示除了登录用户
- c# - 3 个实体之间的三元关系导致实体框架“可能导致循环或多个级联路径”错误
- django - Heroku - 设置 Procfile 以运行 Django 命令来创建数据库
- c - 是否有将 Racket 编译为 C 的编译器?