IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot集成ElasticSearch -> 正文阅读

[Java知识库]springboot集成ElasticSearch

elasticsearch 和mongo都是文档型的数据库,听的比较多,趁有时间了解学习一下,顺便记录分享一下, 操作之前建议先了解一下ES的接口操作方法,以及数据结构概念;

1、环境准备

JAVA 1.8

ElasticSearch:7.6.2

springboot:2.3.10.RELEASE

因为我的elasticsearch版本比较新,这里采用的springboot版本也高一点

2、引入相应的包, 这里版本保持和ES版本同步

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.elasticsearch.client</groupId>
					<artifactId>transport</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.elasticsearch.client</groupId>
					<artifactId>elasticsearch-rest-high-level-client</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>transport</artifactId>
			<version>7.6.2</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>elasticsearch-rest-high-level-client</artifactId>
			<version>7.6.2</version>
		</dependency>

3、新增配置文件

#ES的连接地址,多个地址用逗号分隔, ES没有设置密码就是下面的这个默认密码
spring.elasticsearch.rest.uris=http://192.168.1.103:9200
spring.elasticsearch.rest.username=elastic
spring.elasticsearch.rest.password=changeme

4、新建对应的entry实体类和Repository类,提供了类似JPA的数据库Dao的操作方式,指定对应的分词方式,匹配规则使用ElasticsearchRestTemplate进行操作,简单的类似关系型操作可以使用Repository类提供的方法;

text类型:
会进行分词,分词后建立索引。【比如:对于‘佟永硕’,ik分词器的smart分词会自动将其分成佟、永、硕三个字符进行建立索引,所以单字符搜索可以搜索到,而比如‘永硕’则搜索不到】
支持模糊查询,支持准确查询。
不支持聚合查询
keyword类型:
不分词,直接建立索引。【依据此特点,可以使用keyword类型+wildcardQuery(通配查询)实现类似sql的like查询(模糊搜索)】
支持模糊查询,支持准确查询。
支持聚合查询

/**
 * Type 类型 7.x 之后以及废弃
 */
@Data
@Document(indexName = LifeCircleContentES.INDEX_NAME)
public class LifeCircleContentES {

    public static final String INDEX_NAME = "lifecircle";
    public static final String INDEX_TYPE = "content";

    @Id
    private Long id;

    /**
     * 搜索文本
     */
    @Field(type = FieldType.Text, analyzer = "ik_smart")
    private String searchText;

    /**
     * 创建时间
     */
    @Field(type = FieldType.Date, format = DateFormat.basic_date_time)
    private Date createTime;

    /**
     * 更新时间
     */
    @Field(type = FieldType.Date, format = DateFormat.basic_date_time)
    private Date updateTime;

}
@Repository
public interface LifeCircleContentESRepository extends ElasticsearchRepository<LifeCircleContentES, Long> {

}

5、新增document(类似关系型数据库的一行数据),建议主动设置一下id,自动生成的是没有规则的字符串

	@Test
	public void testAddEs(){
		LifeCircleContentES contentES = new LifeCircleContentES();
		contentES.setSearchText("庆历四年春,滕子京谪守巴陵郡。越明年,政通人和,百废具兴,乃重修岳阳楼,增其旧制,刻唐贤今人诗赋于其上,属予作文以记之。\n" +
				"予观夫巴陵胜状,在洞庭一湖。衔远山,吞长江,浩浩汤汤,横无际涯,朝晖夕阴,气象万千,此则岳阳楼之大观也,前人之述备矣。然则北通巫峡,南极潇湘,迁客骚人,多会于此,览物之情,得无异乎?\n" +
				"若夫淫雨霏霏,连月不开,阴风怒号,浊浪排空,日星隐曜,山岳潜形,商旅不行,樯倾楫摧,薄暮冥冥,虎啸猿啼。登斯楼也,则有去国怀乡,忧谗畏讥,满目萧然,感极而悲者矣。\n" +
				"至若春和景明,波澜不惊,上下天光,一碧万顷,沙鸥翔集,锦鳞游泳,岸芷汀兰,郁郁青青。而或长烟一空,皓月千里,浮光跃金,静影沉璧,渔歌互答,此乐何极!登斯楼也,则有心旷神怡,宠辱偕忘,把酒临风,其喜洋洋者矣。\n" +
				"嗟夫!予尝求古仁人之心,或异二者之为,何哉?不以物喜,不以己悲,居庙堂之高则忧其民,处江湖之远则忧其君。是进亦忧,退亦忧。然则何时而乐耶?其必曰“先天下之忧而忧,后天下之乐而乐”乎!噫!微斯人,吾谁与归?\n" +
				"时六年九月十五日。");
		contentES.setId(2l);
		lifeCircleContentESRepository.save(contentES);
		log.info(contentES.toString());
	}

6、查看新增document,也可以代码段match根据关键词检索

192.168.1.103:9200/lifecircle/_search

7、代码测试检索效果: 有两种方法,如果有mongo的话建议风格统一用第一种

	@Test
	public void testSearchEs(){
		//类似 mongo的 template的操作 但是没有找到匹配词条的
//		Criteria criteria = Criteria.where("searchText").expression("一介书生");
//		CriteriaQuery criteriaQuery = new CriteriaQuery(criteria, PageRequest.of(0, 100));
		//第二种 
		MatchPhraseQueryBuilder builder = QueryBuilders.matchPhraseQuery("searchText", "上下天光");
		NativeSearchQuery searchQuery = new NativeSearchQuery(builder);
		SearchHits searchHits = restTemplate.search(searchQuery, LifeCircleContentES.class);


		List<LifeCircleContentES> esList = (List<LifeCircleContentES>) searchHits.get().collect(Collectors.toList());
		log.info(esList.toString());
	}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:48:23  更:2022-03-06 12:48:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:47:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码