文章目录
一、安装Elasticsearch相关插件
1.选择版本
为了避免使用的Elasticsearch版本和SpringBoot采用的版本不一致导致的问题,尽量使用一致的版本。下表是对应关系:
我的SpringBoot版本:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.15</version><relativePath /></parent>
所以选择对应Elasticsearch版本为7.12.0。
2.安装Elasticsearch
Elasticsearch各版本下载
Elasticsearch7.12.0官网下载
- 下载上面链接的安装包
- 解压到任意目录
- 启动es /bin/elasticsearch.bat
- 查看安装结果,在网页输入localhost:9200,出现下图即为成功
这时可能会存在一个问题,用localhost可以访问到,用ip访问不到
需要修改Elasticsearch安装目录下的/config/elasticsearch.yml,在58行添加如下设置
network.bind_host:0.0.0.0
添加完成后,重新启动es服务,可能会出现闪退问题
其中如果问题为:bootstrap check failure [1] of [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
需要把Elasticsearch安装目录下的/config/elasticsearch.yml中大概77行位置的
#cluster.initial_master_nodes:["node-1","node-2"]
注释放开,改为
cluster.initial_master_nodes:["node-1"]
3.安装node
es5以上就需要安装node和grunt,所以安装head插件的前提,是需要把该两项配置好。
node下载地址下载对应环境的node版本安装即可。
安装过程结束后,在dos窗口查看是否安装成功,使用命令:node -v,出现如下截图,则说明安装成功。
4.安装grunt
在node安装路径下,使用命令安装:npm install -g grunt-cli 安装grunt。 安装结束后,使用命令grunt
-version查看是否安装成功,出现如下截图,说明安装成功。
5.安装es-head插件
方便查看ES中的索引及数据
es-head下载地址
解压elasticsearch-head-master
再改目录下进入cmd命令,执行npm install
执行完成后运行命令 grunt serve,
grunt serve是启动命令
如果出现报错
则使用 cmd继续执行npm install grunt --save-dev。 这将向package.json添加最新版本。
如果不报错,则命令窗显示
浏览器输入127.0.0.1:9100
这里其实无法连接到elasticsearch, 还需要解决跨域问题
由于前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置。
修改Elasticsearch安装目录下的/config/elasticsearch.yml,添加如下设置
http.cors.enabled:true
http.cors.allow-origin:"*"
http.cors.allow-credentials:true
http.cors.allow-headers:Content-Type,Accept,Authorization,x-requested-with
#http.cors.allow-headers:"*"
重启ES服务
6.安装kibana
用途:便于通过rest api调试ES。
kibana官方7.12.0下载地址
kibana中文社区下载地址
- 解压
- 修改 kibana-7.12.0-windows-x86_64/config/kibana.yml 32行
- 改为elasticsearch.hosts: [“http://127.0.0.1:9200”]
- 保存之后,运行bin/kibana.bat
- 浏览器中访问kibana首页首页链接
直接访问开发工具:开发工具
如果想使用ip访问kibana,需要修改 kibana-7.12.0-windows-x86_64/config/kibana.yml 7行
改为 server.host: “0.0.0.0”
如果想使用kibana汉化 需要修改 kibana-7.12.0-windows-x86_64/config/kibana.yml 最后一行
i18n.locale: “zh-CN”
7.安装ik分词器
注意:下载的ik分词器版本号要和安装的elasticsearch版本一致
把下载的ik分词器解压至Elasticsearch的安装目录/plugins/ik内。
- 测试ik分词器
- 重启elasticsearch
- 重启kibana
- 进入kibana的开发工具中执行命令测试 开发工具
- 执行命令: GET _analyze{ “analyzer”: “ik_max_word”, “text”: “折上折满减”}
- 执行结果如下
二、整合SpringBoot和Elasticearch
1.pom.xml
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.15</version><relativePath /></parent><!--springBoot2.5.15对应Elasticsearch7.12.0版本--><!--elasticsearch--><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.12.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>
2.application.yml
spring:
elasticsearch:
rest:
uris:192.168.1.36:9200
connection-timeout:1s
read-timeout:30s
3.ElasticSearch(实体类)
importlombok.Data;importorg.springframework.data.annotation.Id;importorg.springframework.data.elasticsearch.annotations.Document;importorg.springframework.data.elasticsearch.annotations.Field;importorg.springframework.data.elasticsearch.annotations.FieldType;//@Document 文档对象 (索引信息、文档类型 )@Document(indexName="blog3")@DatapublicclassElasticSearch{//@Id 文档主键 唯一标识@Id//@Field 每个文档的字段配置(类型、是否分词、是否存储、分词器 )@Field(store=true, index =false,type =FieldType.Integer)privateInteger id;@Field(index=true,analyzer="ik_smart",store=true,searchAnalyzer="ik_smart",type =FieldType.Text)privateString title;@Field(index=true,analyzer="ik_smart",store=true,searchAnalyzer="ik_smart",type =FieldType.Text)privateString content;@Field(index=true,store=true,type =FieldType.Double)privateDouble price;}
4.ElasticSearchRepository
importcom.economics.project.es.domain.ElasticSearch;importorg.springframework.data.elasticsearch.annotations.Highlight;importorg.springframework.data.elasticsearch.annotations.HighlightField;importorg.springframework.data.elasticsearch.annotations.HighlightParameters;importorg.springframework.data.elasticsearch.core.SearchHit;importorg.springframework.data.elasticsearch.repository.ElasticsearchRepository;importorg.springframework.stereotype.Repository;importjava.util.List;@RepositorypublicinterfaceElasticSearchRepositoryextendsElasticsearchRepository<ElasticSearch,Integer>{/**
* 查询内容标题查询
* @param title 标题
* @param content 内容
* @return 返回关键字高亮的结果集
*/@Highlight(
fields ={@HighlightField(name ="title"),@HighlightField(name ="content")},
parameters =@HighlightParameters(preTags ={"<span style='color:red'>"}, postTags ={"</span>"}, numberOfFragments =0))List<SearchHit<ElasticSearch>>findByTitleOrContent(String title,String content);}
5.ElasticSearchService
importcom.economics.project.es.domain.ElasticSearch;importorg.springframework.data.elasticsearch.core.SearchHit;importjava.util.List;publicinterfaceElasticSearchService{//保存和修改voidsave(ElasticSearch article);//查询idElasticSearchfindById(Integer id);//删除指定ID数据voiddeleteById(Integer id);longcount();booleanexistsById(Integer id);List<SearchHit<ElasticSearch>>findByTitleOrContent(String title,String content);}
6.ElasticSearchServiceImpl
importcom.economics.project.es.domain.ElasticSearch;importcom.economics.project.es.service.ElasticSearchService;importcom.economics.project.es.service.ElasticSearchRepository;importorg.springframework.data.elasticsearch.core.SearchHit;importorg.springframework.stereotype.Service;importjavax.annotation.Resource;importjava.util.List;@ServicepublicclassElasticSearchServiceImplimplementsElasticSearchService{@ResourceprivateElasticSearchRepositoryElasticSearchRepository;@Overridepublicvoidsave(ElasticSearchElasticSearch){ElasticSearchRepository.save(ElasticSearch);}@OverridepublicElasticSearchfindById(Integer id){returnElasticSearchRepository.findById(id).orElse(newElasticSearch());}@OverridepublicvoiddeleteById(Integer id){ElasticSearchRepository.deleteById(id);}@Overridepubliclongcount(){returnElasticSearchRepository.count();}@OverridepublicbooleanexistsById(Integer id){returnElasticSearchRepository.existsById(id);}@OverridepublicList<SearchHit<ElasticSearch>>findByTitleOrContent(String title,String content){returnElasticSearchRepository.findByTitleOrContent(title,content);}}
7.EsTest
importcom.economics.EconomicsApplication;importcom.economics.project.es.domain.ElasticSearch;importcom.economics.project.es.service.ElasticSearchService;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;importorg.springframework.data.elasticsearch.core.SearchHit;importorg.springframework.test.context.junit4.SpringRunner;importjavax.annotation.Resource;importjava.util.List;@RunWith(SpringRunner.class)@SpringBootTest(classes =EconomicsApplication.class)publicclassEsTest{@ResourceprivateElasticSearchService elasticSearchService;@ResourceprivateElasticsearchRestTemplate elasticsearchRestTemplate;/**创建索引和映射*/@TestpublicvoidcreateIndex(){// elasticsearchTemplate.createIndex(ElasticSearch.class);// elasticsearchTemplate.putMapping(ElasticSearch.class);}/**添加文档或者修改文档(以id为准)*/@TestpublicvoidsaveElasticSearch(){ElasticSearch elasticSearch =newElasticSearch();
elasticSearch.setId(1);
elasticSearch.setTitle("SpringData ElasticSearch");
elasticSearch.setContent("Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch操作,将原始操作elasticSearch的客户端API 进行封装 \n"+" Spring Data为Elasticsearch Elasticsearch项目提供集成搜索引擎");
elasticSearchService.save(elasticSearch);}@TestpublicvoidfindById(){ElasticSearch byId = elasticSearchService.findById(1);System.out.println(byId);}@TestpublicvoiddeleteById(){
elasticSearchService.deleteById(100);}@Testpublicvoidcount(){long count = elasticSearchService.count();System.out.println(count);}@TestpublicvoidexistsById(){boolean b = elasticSearchService.existsById(102);System.out.println(b);}@TestpublicvoidfindByTitleOrContent(){List<SearchHit<ElasticSearch>> byTitleOrContent = elasticSearchService.findByTitleOrContent("xxxxxxSpringData","elasticSearch");for(SearchHit<ElasticSearch> elasticSearchService : byTitleOrContent){List<String> title = elasticSearchService.getHighlightField("title");System.out.println(title);List<String> content = elasticSearchService.getHighlightField("content");System.out.println(content);}}}
8.自定义查询方式
关键字解释方法and根据Field1和Field2获得数据findByTitleAndContent(String title,String content);or根据Field1或Field2获得数据findByTitleOrContent(String title,String content);is根据Field获得数据findByTitle(String title);not根据Field获得相反数据findByTitleNot(String title)between获得指定范围的数据findByPriceBetween(double price1, double price2);lessThanEqual获得小于等于指定值的数据findByPriceLessThan(double price);GreaterThanEqual获得大于等于指定值的数据findByPriceGreaterThan(double price);BeforefindByPriceBeforeAfterfindByPriceAfterLike比较相识的数据findByNameLikeStartingWith以xx开头的 数据findByNameStartingWith(String Name);EndingWith以xx结尾的 数据findByNameEndingWith(String Name);Contains/Containing包含的 数据findByNameContaining(String Name);In多 值匹配findByNameIn(Collectionnames)NotIn多 值 不匹配findByNameNotIn(Collectionnames)OrderBy排序 后的数据findByxxxxxOrderByNameDesc(String xxx );
版权归原作者 属于码农的烟火 所有, 如有侵权,请联系我们删除。