例如:在百度搜索框我们输入小字,就会联想出相关字段属性一样,我们也正是想通过elasticSearch实现该功能。
在这里插入图片描述
首先要把MySql中的数据导入到elasticSearch中去:
这里我们就不详细描述了,去我的另外一篇文章有专门的详细描述
链接:把MySql中的数据导入elasticSearch中去,并构建相关联想约束.

下面的代码的前提是我们已经建立好了索引----------》对应到我们的关系型数据库也就是表。

1、效果展示:
输入拼音或者部分品牌或者分类信息会联想出来内容
在这里插入图片描述
2、后台Controller 代码:
其中关联数据不是从MySql中所查询的,是从elasticSearch中所查询的
在这里插入图片描述
3.Service中的代码:

在这里插入图片描述
前端以及elasticSearch中实现比对
在这里插入图片描述

附上代码:

Controller:
@RestController
@RequestMapping("search")
public class SearchController {

    @Autowired
    private SearchService searchService;

    @GetMapping("suggestion")
    public List<String> getSuggestion(@RequestParam("key") String key){

        return  searchService.getSuggestion(key);
    }
    }

Service层:

@Override
    public List<String> getSuggestion(String key) {
        try {
            SearchRequest request =new SearchRequest("hmall");

            //构造联想查询的条件
            request.source().suggest(new SuggestBuilder()
                    .addSuggestion("my_suggest",
                            SuggestBuilders
                                    .completionSuggestion("suggestion")
                                    .skipDuplicates(true)
                                    .size(20)
                                    .prefix(key)));

            //开始查询
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            //解析结果
            CompletionSuggestion my_suggest = response.getSuggest().getSuggestion("my_suggest");
            List<CompletionSuggestion.Entry.Option> options = my_suggest.getOptions();
            List<String> list = new ArrayList<>();

            if(options!=null && options.size()>0){
                for (CompletionSuggestion.Entry.Option option : options) {
                    String string = option.getText().string();
                    list.add(string);
                }
            }
            return list;
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐