繁体   English   中英

Elasticsearch:通过Java客户端发送JSON查询字符串?

[英]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内置了以有组织的方式完成您所需要的功能。

要回答你的问题,请看这个链接(材料在弹性网站上消失了,所以它可能不再起作用):

https://web.archive.org/web/20150906215934/https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/search.html

您所要做的就是构建一个包含搜索模板的简单文件,即复杂的搜索查询。 它可以是简单的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM