[英]Elasticsearch: send JSON query string via Java client?
我是Elasticsearch的新手。 我阅读了Elasticsearch的Java客户端API,并能够构建查询并通过传输客户端将其发送到Elasticsearch服务器。
因为我的查询对于多级过滤器非常复杂,我注意到通过Java客户端构建查询很麻烦。 我觉得构建JSON查询字符串然后通过Java客户端将其发送到Elasticsearch服务器要简单得多。
这是Elasticsearch提供的东西吗?
我喜欢Elasticsearch Java API在收到滚动结果等结果后可以做的事情。 我想保留这些功能。
感谢您的任何输入和链接!
问候。
对Elasticsearch API进行了进一步的研究,发现Elasticsearch确实提供了这种功能。 方法如下:
SearchResponse scrollResp = client.prepareSearch("my-index")
.setTypes("my-type")
.setSearchType(SearchType.SCAN)
.setQuery(query) // **<-- Query string in JSON format**
.execute().actionGet();
我建议使用Java API,一旦你习惯它就非常好,在大多数情况下它不那么麻烦。 如果您查看Elasticsearch源代码,您将看到Java API构建了JSON。 以下是MatchAllQueryBuilder的示例:
@Override
public void doXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject(MatchAllQueryParser.NAME);
if (boost != -1) {
builder.field("boost", boost);
}
if (normsField != null) {
builder.field("norms_field", normsField);
}
builder.endObject();
}
ElasticSearch内置了以有组织的方式完成您所需要的功能。
要回答你的问题,请看这个链接(材料在弹性网站上消失了,所以它可能不再起作用):
您所要做的就是构建一个包含搜索模板的简单文件,即复杂的搜索查询。 它可以是简单的json文件,也可以是文本文件。
现在,您只需通过Java代码传入参数即可。 请参阅链接中的示例,它使事情变得清晰。
Bhargav。
您不能再将字符串传递给.setQuery函数,但是您可以像这样使用WrapperQueryBuilder:
WrapperQueryBuilder builder = QueryBuilders.wrapperQuery(searchQuery);
SearchRequestBuilder sr = client.prepareSearch().setIndices(index).setTypes(mapping).setQuery(builder);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.