ElasticSearch 5将上下文添加到RecommendationtionBuilders

use*_*782 1 java elasticsearch search-suggestion

我正在通过Java开发ES5,并尝试将上下文添加到CompletionSuggestionBuilder。我有一个需要添加的String对象的映射。到目前为止,我的代码是-

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

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

csb.contexts(Map<String, List<? extends ToXContent>> queryContexts)
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何从我的地图到地图,以作为参数传递给contexts方法。

end*_*unc 5

您可以这样创建Map<String, List<? extends ToXContent>>

Collections.singletonMap("cat", Arrays.asList(CategoryQueryContext.builder().setCategory("cat0").setBoost(3).build(), CategoryQueryContext.builder().setCategory("cat1").build()))
Run Code Online (Sandbox Code Playgroud)

我认为当前支持的扩展类型ToXContextCategoryQueryContextGeoQueryContext

奇怪的是,如果我创建一个局部变量并将其传递给,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())));
Run Code Online (Sandbox Code Playgroud)

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

希望能帮助到你。