2017-03-16 2 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())) 

나는 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

희망이 도움이됩니다.

관련 문제