使用Java API在Elasticsearch中使用完成建议查询 [英] Querying with Completion Suggesters in Elasticsearch with Java API

查看:126
本文介绍了使用Java API在Elasticsearch中使用完成建议查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了索引,并且建议字段的映射类型设置为完成。我无法弄清楚如何在弹性搜索(Java API)中配置查询以获取完成建议

I have my indices created, and mapping type for my 'suggest' field set to completion. I can't figure out how to configure the query for completion suggestions in elastic-search (Java API)

我正在尝试使用此查询作为实现的基础

I'm trying to use this Query to base my implementation off of.

"song-suggest" : {
    "text" : "n",
    "completion" : {
        "field" : "suggest"
    }
}

这是我到目前为止所拥有的,

Here's what I have so far,

CompletionSuggestionBuilder compBuilder = new CompletionSuggestionBuilder("complete"); 
compBuilder.text("n");
compBuilder.field("suggest");

SearchResponse searchResponse = localClient.prepareSearch(INDEX_NAME)
    .setTypes("completion")
    .setQuery(QueryBuilders.matchAllQuery())
    .addSuggestion(compBuilder)
    .execute().actionGet();

 CompletionSuggestion compSuggestion = searchResponse.getSuggest().getSuggestion("complete");


我错过了什么,做错了吗?谢谢!

Am I missing something, doing something wrong? Thanks!

推荐答案

不确定这是否是最好的选择。但这对我有用。

Not sure if this is the best thing to do. But this works for me. Hope it helps.

@Override
public List<SuggestionResponse> findSuggestionsFor(String suggestRequest) {
    CompletionSuggestionBuilder suggestionsBuilder = new CompletionSuggestionBuilder("completeMe");
    suggestionsBuilder.text(suggestRequest);
    suggestionsBuilder.field("suggest");
    SuggestRequestBuilder suggestRequestBuilder =
            client.prepareSuggest(MUSIC_INDEX).addSuggestion(suggestionsBuilder);

    logger.debug(suggestRequestBuilder.toString());

    SuggestResponse suggestResponse = suggestRequestBuilder.execute().actionGet();

    Iterator<? extends Suggest.Suggestion.Entry.Option> iterator =
            suggestResponse.getSuggest().getSuggestion("completeMe").iterator().next().getOptions().iterator();

    List<SuggestionResponse> items = new ArrayList<>();
    while (iterator.hasNext()) {
        Suggest.Suggestion.Entry.Option next = iterator.next();
        items.add(new SuggestionResponse(next.getText().string()));
    }
    return items;
}

这篇关于使用Java API在Elasticsearch中使用完成建议查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆