2017-03-16 107 views
1

我正在通過java處理ES5,並且正在嘗試向CompletionSuggestionBuilder添加上下文。我有一個需要添加的String對象的映射。我到目前爲止的代碼是 -ElasticSearch 5向SuggestionBuilders添加上下文

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

如何將上下文對象添加到csb?我想使用的方法是 -

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

但我不知道如何從我的地圖,地圖上得到作爲參數傳遞給上下文方法。任何幫助非常感謝!

回答

3

您可以像這樣創建Map<String, List<? extends ToXContent>>;

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

我認爲延長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()))); 

這是所有寫在他們的測試用例。你可以看看它: https://github.com/elastic/elasticsearch/blob/master/core/src/test/java/org/elasticsearch/search/suggest/ContextCompletionSuggestSearchIT.java#L290

希望它有幫助。

相關問題