ElasticSearch 5 为 SuggestionBuilders 添加上下文



我正在通过java开发ES5,并试图为CompletionSuggestionBuilder添加上下文。我有一个需要添加的字符串对象的映射。到目前为止,我拥有的代码是 -

Map<String, String> context = ...
CompletionSuggestionBuilder csb = SuggestBuilders.completionSuggestion(field).text(value).size(count);

如何将上下文对象添加到csb?我认为使用方法是 -

csb.contexts(Map<String, List<? extends ToXContent>> queryContexts)

但是我不知道如何从我的地图到地图作为参数传递给上下文方法。

你可以

像这样创建Map<String, List<? extends ToXContent>>;

Collections.singletonMap("cat", Arrays.asList(CategoryQueryContext.builder().setCategory("cat0").setBoost(3).build(), CategoryQueryContext.builder().setCategory("cat1").build()))

我认为目前支持的扩展ToXContext的类型是CategoryQueryContextGeoQueryContext

奇怪的是,如果我创建一个局部变量并将其传递给contexts它不起作用。因此,我只是将其直接传递给它确实有效的上下文。

完整示例如下所示:

CompletionSuggestionBuilder prefix = SuggestBuilders.completionSuggestion(FIELD).prefix("sugg").contexts(Collections.singletonMap("cat", Arrays.asList(CategoryQueryContext.builder().setCategory("cat0").setBoost(3).build(), CategoryQueryContext.builder().setCategory("cat1").build())));

这一切都写在他们的测试用例中。你可以看看它:https://github.com/elastic/elasticsearch/blob/master/core/src/test/java/org/elasticsearch/search/suggest/ContextCompletionSuggestSearchIT.java#L290

希望对您有所帮助。

最新更新