<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 扫描Dao包,自动创建实例(指定一个es仓库的包扫描位置) -->
<!--我们 主要是用spring-data的方式来操作es的增删改查 -->
<!-- 这个包下就是我们声明的es的仓库接口 -->
<elasticsearch:repositories base-package="com.wpx.dao" />
//索引库的名称 (必须是纯小写字母,) 表名
@Document(indexName="cms_articles",type="article")
@Id
private Integer id;;// 主键
// 指定name的值是否索引,2.是否存储3.title的值的分词方式 4.搜索的关键字分词的方式 5指定该字段的值以什么样的数据类型来存储
@Field(index=true,store=true,analyzer="id_max_word",searchAnalyzer="ik_max_word",type=FieldType.text)
在spring.xml中加载es.xml
//测试高亮显示
@Test
public void testHL() {
//1高亮操作需要的模板对象,2.指定要操作的实体类字节码 3.当前页,4每页小时条数 ,5指定要搜索字段的数组 6.指定排序字段 7搜索关键字
PageInfo<Article> info = (PageInfo<Article>) HLUtils.findByHighLight(elasticsearchTemplate, Article.class, 1, 10, new String[] {
"title","name"}, "id", "keyword");
}
@RequestMapping("search")
public String search(String keyword,@RequestParam(defaultValue="1")Integer pageNum ,@RequestParam(defaultValue="3")Integer pageSize ,Model model) {
//需求,使用es做搜索
//1.导入依赖(已经导入)
//2.配置文件(让spring的配置加载es.xml)
//3.修改xml,指定仓库接口包扫描位置,
//4.编写仓库接口,继承ElasticSearchRepository的接口,就具备了CRUD的功能
//5.在实体类上执行对应的库名表名,主键,搜索关键字(注解)
//6.得把mysql的数据导入到es索引库
//使用工具类搜索
//1高亮操作需要的模板对象,2.指定要操作的实体类字节码 3.当前页,4每页小时条数 ,5指定要搜索字段的数组 6.指定排序字段 7搜索关键字
PageInfo<Plan> info = (PageInfo<Plan>) HLUtils.findByHighLight(elasticsearchTemplate, Plan.class, pageNum, pageSize, new String[] {
"content","name","manager"}, "id", keyword);
model.addAttribute("info", info);
model.addAttribute("key", keyword);
return "list";
}
<form action="search" method="get">
<input type="text" name="keyword" value="${key }">
<button>搜索</button>
</form>
public class MsgListener implements MessageListener<String, String>{
@Autowired
PlanRepository planRepository;
@SuppressWarnings("rawtypes")
@Autowired
RedisTemplate redisTemplate;
@Override
public void onMessage(ConsumerRecord<String, String> data) {
String msg = data.value();
System.out.println("收到了消息!!!!!!!");
System.out.println(msg);
if(msg.startsWith("update")) {
String[] split = msg.split("=");
String jsonString = split[1];
//转成对象
Plan plan = JSON.parseObject(jsonString, Plan.class);
//修改es索引库的数据
planRepository.save(plan);
//同步redis库数据
redisTemplate.delete("zhunneng_plans");
}
if(msg.startsWith("del")) {
String[] split = msg.split("=");
//17,18,19
String ids = split[1];
String[] split2 = ids.split(",");
for (String id : split2) {
Integer id1 = Integer.parseInt(id);
//同步es索引库
planRepository.deleteById(id1);
//同步redis数据库,把redis的数据删除,在查询的时候,就会重新mysql重新,并保存redis
redisTemplate.delete("zhunneng_plans");
}
System.out.println("删除es索引库成功");
}
if(msg.startsWith("save")) {
String[] split = msg.split("=");
Plan plan = JSON.parseObject(split[1], Plan.class);
//保存到es索引库
planRepository.save(plan);
System.out.println("同步es索引库成功!!!!!!");
}
}
}