如何从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();
谢谢您的帮助。
答案 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