我正在通过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
的类型是CategoryQueryContext
和GeoQueryContext
奇怪的是,如果我创建一个局部变量并将其传递给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
希望对您有所帮助。