I am new to elastic search and trying to integrate the completion suggester to one of my application by following the article You Complete Me
I have inserted the sample data to the ES with mapping and the below CURL query(windows) returns the result
curl -H "Content-Type: application/json" -X POST localhost:9200/hotels/_search?pretty -d^
"{^
\"suggest\": {^
\"hotel_suggest\" : {^
\"prefix\" : \"hot\", ^
\"completion\" : { ^
\"field\" : \"name_suggest\" ^
}^
}^
}^
}"
Unfortunalty the below code using the Java API is not returning any documents from the DB (Just printing the results for the testing purpose)
public String suggestSearch() throws IOException {
SearchRequest searchRequest = new SearchRequest("hotels");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// searchSourceBuilder.query(QueryBuilders.matchAllQuery());
SuggestionBuilder termSuggestionBuilder =
SuggestBuilders.termSuggestion("name").text("hot");
SuggestBuilder suggestBuilder = new SuggestBuilder();
suggestBuilder.addSuggestion("name_suggest", termSuggestionBuilder);
searchSourceBuilder.suggest(suggestBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
Suggest suggest = searchResponse.getSuggest();
TermSuggestion termSuggestion = suggest.getSuggestion("name_suggest");
for (TermSuggestion.Entry entry : termSuggestion.getEntries()) {
for (TermSuggestion.Entry.Option option : entry) {
String suggestText = option.getText().string();
System.out.println(suggestText);
}
}
return "SUCCESS";
}
What is wrong in this code?
Here a sample code to get results from the example completion suggester
public static void suggestSearch()
{
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost( "your-ip-here", 9200, "http" ) ) );
SearchRequest searchRequest = new SearchRequest( "music" );
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
SuggestionBuilder termSuggestionBuilder = SuggestBuilders.completionSuggestion( "suggest" ).prefix( "nev" );
SuggestBuilder suggestBuilder = new SuggestBuilder();
suggestBuilder.addSuggestion( "song-suggest", termSuggestionBuilder );
searchSourceBuilder.suggest( suggestBuilder );
searchRequest.source( searchSourceBuilder );
SearchResponse searchResponse = null;
try
{
searchResponse = client.search( searchRequest );
}
catch ( IOException e )
{
e.printStackTrace();
}
Suggest suggest = searchResponse.getSuggest();
CompletionSuggestion entries = suggest.getSuggestion( "song-suggest" );
for ( CompletionSuggestion.Entry entry : entries )
{
for ( CompletionSuggestion.Entry.Option option : entry.getOptions() )
{
String suggestText = option.getText().string();
System.out.println( suggestText );
}
}
}
And for the example you-complete-me
public static void suggestSearch()
{
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost( "192.168.1.245", 9200, "http" ) ) );
SearchRequest searchRequest = new SearchRequest( "hotels" );
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
CompletionSuggestionBuilder completionSuggestionBuilder = SuggestBuilders.completionSuggestion( "name_suggest" ).prefix( "M" );
SuggestBuilder suggestBuilder = new SuggestBuilder();
suggestBuilder.addSuggestion( "name_suggest", completionSuggestionBuilder );
searchSourceBuilder.suggest( suggestBuilder );
searchRequest.source( searchSourceBuilder );
SearchResponse searchResponse = null;
try
{
searchResponse = client.search( searchRequest );
}
catch ( IOException e )
{
e.printStackTrace();
}
Suggest suggest = searchResponse.getSuggest();
CompletionSuggestion entries = suggest.getSuggestion( "name_suggest" );
for ( CompletionSuggestion.Entry entry : entries )
{
for ( CompletionSuggestion.Entry.Option option : entry.getOptions() )
{
String suggestText = option.getText().string();
System.out.println( suggestText );
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.