项目中整合es

es

1.导入依赖

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

2.编写配置文件,修改ip和端口,指定仓库接口的包扫描位置

 <!-- 扫描Dao包,自动创建实例(指定一个es仓库的包扫描位置) -->
    <!--我们 主要是用spring-data的方式来操作es的增删改查 -->
    <!-- 这个包下就是我们声明的es的仓库接口 -->
	<elasticsearch:repositories base-package="com.wpx.dao" />

3.根据配置文件的包的位置,就可以创建接口了(继承:ElasticsearchRepository),此时这个接口就具备了CRUD的功能

在这里插入图片描述

4.在实体类中指定索引库的名称(必须小写字母),和表名,指定主键对应的id,指定某个搜索字段的存储属性

在这里插入图片描述

//索引库的名称 (必须是纯小写字母,) 表名
@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)

5.紧接着我们就写一个测试类,可以注入XXXRepository这个接口,实现数据的导入,因为我们的es索引库中没数据,想要搜索到数据,必须得从mysql中查询出数据,然后导入到es索引库,能够保证mysql的数据,和es索引库的数据的一致性

在spring.xml中加载es.xml

<import resource="classpath:es.xml"/>

在这里插入图片描述

6.我们就可以直接调用咱们的HLUtils工具类,实现高亮了


//测试高亮显示
		@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");

		}

7.控制层

在这里插入图片描述

@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";
	}

8.页面

		<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索引库成功!!!!!!");
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值