如何在Spring Data Elasticsearch 4.1.5中结合Term查询与建议功能
解决Elasticsearch搜索建议仅来自特定join字段文档的问题
要让搜索建议仅基于符合joinField: foo条件的文档生成,你需要给搜索建议添加对应的过滤查询。直接通过SuggestBuilders的filter()方法就能实现,无需依赖高版本的Spring Data Elasticsearch特性。
完整实现代码
// 1. 构建join字段的Term过滤查询 QueryBuilder typeFilter = QueryBuilders.termQuery("joinField", "foo"); // 2. 构建带过滤条件的搜索建议 SuggestBuilder suggestBuilder = new SuggestBuilder(); suggestBuilder.addSuggestion("fieldname", SuggestBuilders .phraseSuggestion("fieldname") .text(searchTerm) .size(10) // 关键:添加过滤条件,仅从符合joinField=foo的文档中生成建议 .filter(typeFilter)); // 3. 组装搜索请求并执行 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.suggest(suggestBuilder); SearchRequest searchRequest = new SearchRequest("MyIndex"); searchRequest.source(sourceBuilder); SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
原理说明
Elasticsearch的短语建议器(Phrase Suggester)支持通过filter()方法传入查询条件,限制生成建议的文档范围。这样suggest会先过滤出符合joinField: foo的文档,再基于这些文档的fieldname字段内容生成搜索建议,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Colin
相关产品推荐
相关产品推荐

