0

如何在 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();

感谢您的任何帮助。

4

1 回答 1

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

于 2018-11-10T22:06:44.680 回答