in demo-java/demo-vectors/src/main/java/azure/search/sample/Main.java [326:370]
public static void semanticHybridSearch(SearchClient searchClient, String query) {
// Example of using vector search with a semantic query in addition to vectorization.
VectorQuery vectorizableQuery = new VectorizableTextQuery(query)
.setKNearestNeighborsCount(3)
// Set the fields to compare the vector against. This is a comma-delimited list of field names.
.setFields("contentVector");
SearchOptions searchOptions = new SearchOptions()
.setVectorSearchOptions(new VectorSearchOptions()
.setQueries(vectorizableQuery))
.setTop(3)
.setQueryType(QueryType.SEMANTIC)
.setSemanticSearchOptions(new SemanticSearchOptions()
.setSemanticConfigurationName("my-semantic-config")
.setQueryAnswer(new QueryAnswer(QueryAnswerType.EXTRACTIVE))
.setQueryCaption(new QueryCaption(QueryCaptionType.EXTRACTIVE)));
SearchPagedIterable results = searchClient.search(
"what is azure search?",
searchOptions, Context.NONE);
System.out.println("===================================");
System.out.println("Semantic Hybrid Search Results:");
System.out.println("===================================");
System.out.println("Query Answer:");
for (QueryAnswerResult result : results.getSemanticResults().getQueryAnswers()) {
System.out.println("Answer Highlights: " + result.getHighlights());
System.out.println("Answer Text: " + result.getText());
}
for (SearchResult result : results) {
SearchDocument doc = result.getDocument(SearchDocument.class);
System.out.printf("Score: %f, Title: %s: Content: %s%n", result.getScore(), doc.get("title"), doc.get("content"));
if (result.getSemanticSearch().getQueryCaptions() != null) {
QueryCaptionResult caption = result.getSemanticSearch().getQueryCaptions().get(0);
if (!caption.getHighlights().isBlank()) {
System.out.println("Caption Highlights: " + caption.getHighlights());
} else {
System.out.println("Caption Text: " + caption.getText());
}
}
}
}