简体   繁体   English

使用Java REST Client API在Elasticsearch 6.5.4中完成建议

[英]Completion Suggester in Elasticsearch 6.5.4 with Java REST Client API

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 我已经使用映射将示例数据插入ES,并且下面的CURL查询(窗口)返回结果

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) 不幸的是,使用Java API的以下代码不会从DB返回任何文档(只是打印结果用于测试目的)

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM