2017-03-16 2 views
1

Ich arbeite an ES5 über Java und versuche, einem CompletionSuggestionBuilder einen Kontext hinzuzufügen. Ich habe eine Karte von String-Objekten, die hinzugefügt werden müssen. Der Code, den ich bisher habe, ist -ElasticSearch 5 Kontext zu SuggestionBuilders hinzufügen

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

Wie füge ich Kontextobjekte zu csb hinzu? Ich denke, die Methode zu verwenden ist -

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

Aber ich weiß nicht, wie von meiner Karte, um die Karte zu bekommen als Argumente für die Kontexte Methode zu übergeben. Jede Hilfe sehr geschätzt!

Antwort

3

Sie können Map<String, List<? extends ToXContent>> so erstellen;

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

Ich denke derzeit Typen unterstützt, die ToXContext sind CategoryQueryContext und GeoQueryContext

Das Merkwürdige hier verlängern ist, dass wenn ich eine lokale Variable erstellen und übergeben sie an die contexts es nicht funktioniert. Ich habe es also direkt an die Kontexte übergeben, in denen es funktioniert.

Voll Beispiel würde so aussehen:

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()))); 

Alles in ihre Testfälle geschrieben. Sie können einen Blick darauf werfen: https://github.com/elastic/elasticsearch/blob/master/core/src/test/java/org/elasticsearch/search/suggest/ContextCompletionSuggestSearchIT.java#L290

Ich hoffe, es hilft.

Verwandte Themen