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

时间:2014-07-22 19:51:09

标签: java elasticsearch

我是Elasticsearch的新手。我阅读了Elasticsearch的Java客户端API,并能够构建查询并通过传输客户端将其发送到Elasticsearch服务器。

因为我的查询对于多级过滤器非常复杂,我注意到通过Java客户端构建查询很麻烦。我觉得构建JSON查询字符串然后通过Java客户端将其发送到Elasticsearch服务器要简单得多。

这是Elasticsearch提供的吗?

我喜欢Elasticsearch Java API在收到滚动结果等结果后可以执行的操作。我想保留这些功能。

感谢您提供任何输入和链接!

问候。

4 个答案:

答案 0 :(得分:9)

对Elasticsearch API进行了进一步的研究,发现Elasticsearch确实提供了这种功能。方法如下:

SearchResponse scrollResp = client.prepareSearch("my-index")
        .setTypes("my-type")
        .setSearchType(SearchType.SCAN)
        .setQuery(query) // **<-- Query string in JSON format**
        .execute().actionGet();

答案 1 :(得分:1)

我建议使用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();
}

答案 2 :(得分:1)

ElasticSearch内置了能够以有条理的方式完成您所需要的功能。

要回答您的问题,请参阅此链接(该材料已在弹性网站上删除,因此可能不再有效):

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

您所要做的就是构建一个包含搜索模板的简单文件,即复杂的搜索查询。 它可以是一个简单的json文件,也可以是文本文件。

现在您只需通过Java代码传递参数即可。 请参阅链接中的示例,它使事情变得非常明确。

Bhargav。

答案 3 :(得分:1)

您不能再将字符串传递给.setQuery函数,但是您可以像这样使用WrapperQueryBuilder:

WrapperQueryBuilder builder = QueryBuilders.wrapperQuery(searchQuery);
SearchRequestBuilder sr = client.prepareSearch().setIndices(index).setTypes(mapping).setQuery(builder);