在Java API中使用FilterBuilder和CompletionSuggestion

时间:2014-08-22 17:59:51

标签: java autocomplete elasticsearch

我正在使用Java API进行弹性搜索。 我需要自动完成功能,为此我使用完成

CompletionSuggestionBuilder compBuilder = new CompletionSuggestionBuilder("suggestapi");
compBuilder.field( field_where_search );
compBuilder.text( text_to_search );

SuggestRequestBuilder suggestRequestBuilder = client.prepareSuggest(index);
suggestRequestBuilder.addSuggestion(compBuilder);
SuggestResponse suggestResponse = suggestRequestBuilder.execute().actionGet();

我得到了正确的答复。现在,我想应用过滤器/查询以及此建议。因此,我只需要为["类型" :"行动"]

我想用#34; BoolFilterBuilder"但没有找到如何将它应用于CompletionSuggestionBuilder。

任何解决方案都将受到高度赞赏。

感谢。

1 个答案:

答案 0 :(得分:0)

不,你不能用Completion Suggester做你想做的事。您需要自己过滤结果。

修改

您可以更改索引完成建议的方式,每种类型都可以拥有自己的字段。映射看起来像:

{
    "movie_drama_suggest":{
        "type":"completion"
    },
    "movie_comedy_suggest":{
        "type":"completion"
    },
    "movie_horror_suggest":{
        "type":"completion"
    }
}

您需要在您的应用程序中拥有逻辑,以确定在索引期间根据影片的类型使用哪个建议字段。然后在您的查询中,您可以参考特定类型的建议。

CompletionSuggestionBuilder compBuilder = new CompletionSuggestionBuilder("suggestapi");
compBuilder.field("movie_horror_suggest");
compBuilder.text("Ham");