有什么方法可以直接从BoolQueryBuilder创建Elasticsearch搜索模板?

时间:2018-11-10 12:34:11

标签: java templates elasticsearch

如何从Java中的BoolQueryBuilder轻松创建搜索模板?

现在我正在尝试这样做,但是这种解决方案对我来说似乎有点脏。有什么更好的方法吗?

BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.must(new MoreLikeThisQueryBuilder("myField", "{{myTextToBeReplaced}}", null));
SearchResponse response = new SearchTemplateRequestBuilder(client)
        .setRequest(new SearchRequest())
        .setScriptType(ScriptType.INLINE)
        .setScript(boolQueryBuilder.toString())
        .setScriptParams(templateParams)
        .get();

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正在执行内联模板,甚至使用boolQueryBuilder.toString()呈现json而不是混乱的字符串连接。到目前为止,@ Druudik做得很好。

但是您是否在搜索时尝试了存储的模板https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html)? 这将使模板完全移出Java代码!特别是对于较大的查询,这种方法降低了代码复杂性。

这也将使您的应用更加灵活,因为您可以更改查询/模板,而无需重新编译代码(只要您的参数稳定)。

以下是一些使用Java api的示例:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-template.html