- 搜索
- 搜索记录
一、搭建环境
- Elasticsearch 7.17.9
- Mongo lastest
- SpringBoot 2.7.12
- MySQL 8.0.31
建表语句:
create database `prac-search-demo`; |
pom.xml
|
application.yml
spring: |
application-dev.yml
spring: |
二、项目初始化
创建ES索引库
参考文章:https://www.jianshu.com/p/56e755415e63
使用CURL
curl -XPUT "http://127.0.0.1:9200/search_article" -H 'Content-Type: application/json' -d ' |
使用POSTMAN等软件皆可
- GET请求查询映射:http://127.0.0.1:9200/search_article
- DELETE请求,删除索引及映射:http://127.0.0.1:9200/search_article
- GET请求,查询所有文档:http://127.0.0.1:9200/search_article/_search
数据初始化到索引库
Article
package com.juzi.search.pojo; |
ArticleRepository
package com.juzi.search.esdao; |
Init
package com.juzi.search; |
测试:GET请求查询映射:http://127.0.0.1:9200/search_article
实现搜索功能
ArticleSearchDTO
package com.juzi.search.dto; |
具体实现搜索:
|
实现搜索历史记录功能
搜索记录,需要给每一个用户都保存一份,数据量较大,要求加载速度快,通常这样的数据存储到mongodb更合适,不建议直接存储到关系型数据库中
- 展示用户的搜索记录10条,按照搜索关键词的时间倒序
- 可以删除搜索记录
- 保存历史记录,保存10条,多余的则删除最久的历史记录
创建映射
ArticleAssociateWords
package com.juzi.search.pojo; |
测试:
package com.juzi.search; |
具体实现:
1)插入历史记录
public void insertHistory(String associateWords) { |
2)加载历史记录
public List<ArticleAssociateWords> loadHistory() { |
3)删除历史记录
public Boolean deleteHistory(String id) { |
在用户进行搜索的时候,异步记录搜索关键词
public List<Article> searchArticle(ArticleSearchDTO articleSearchDTO) {
String searchText = articleSearchDTO.getSearchText();
if (searchText.isEmpty()) {
return null;
}
// 异步保存历史记录
CompletableFuture.runAsync(() -> insertHistory(searchText));
// ....
}