项目中整合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的功能

项目中整合es_第1张图片

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

项目中整合es_第2张图片

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


项目中整合es_第3张图片

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.控制层

项目中整合es_第4张图片

@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>

项目中整合es_第5张图片

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

你可能感兴趣的:(java,elasticsearch)