ElasticSearch不仅是全文检索引擎的领头羊,如今也是各个大厂标配的大数据平台之一,被普遍用于搜索加速,用户标签、画像系统、向量搜索等领域,它不是传统的关系型数据库,但这个信息爆炸,数据堆积的时代,咱们获取知识的方式已经极大的改变,搜索、提问成了获取知识的第一手段。对ElasticSearch工程师的要求已经不亚于甚至超过了对DBA的要求。那么,要如何才能成为一个被承认的ElasticSearch工程师?但愿这篇文章可以从一个开发工程师的角度,给你们带来帮助。html
公众号:「浅羽的IT小屋」
java
「Lucence的简单入门:」node
在此以前咱们先谈谈Lucence,它是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的建立索引和查询索引,以及部分文本分析的引擎。mysql
Lucence的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础创建起完整的全文检索引擎,Lucence在全文检索领域是一个经典的祖先,如今不少检索引擎都在其基础上建立的,思想是相通的。git
Lucence是根据关键字来搜索的文本搜索工具,只能在某个网站内容搜索文本内容,不能跨网站搜索。github
想进一步了解Lucence的能够下面博客查阅面试
https://www.cnblogs.com/ysdrzp/p/10009660.html
倒排索引是目前搜索引擎公司对搜索引擎最经常使用的存储方式,也是搜索引擎的核心内容,在搜索引擎的实际应用中,有时须要按照关键字的某些值查找记录,因此是按照关键字创建索引,这个索引就是倒排索引spring
ElasticSearch是一个基于Lucence的全文搜索服务器,java语言编写,提供了分布式的搜索引擎,安装方便,使用简单sql
三、ElasticSearch能干什么?数据库
「主要用途:」
分布式下首页搜索,如百度,淘宝,京东...
基于索引数据存储
四、Elastic有哪些产品
「主要产品:」
E(ElasticSearch)
L(logstash)
K(Kibana)
B(Beats)
五、ElasticSearch的安装以及使用
「安装ElasticSearch:」
Elasticsearch官网:https://www.elastic.co/cn/products/elasticsearch 下载地址:https://www.elastic.co/downloads/past-releases 安装Elasticsearch前提条件:JDK1.8及以上
「安装:」
ElasticSearch无需安装,解压即用
「运行:」
进入elasticsearch/bin目录,双击可执行文件elasticsearch.bat 能够看到绑定了两个端口: 9300:Java程序访问的端口 9200:浏览器、postman访问的端口 咱们在浏览器中访问:http://127.0.0.1:9200,出现json数据字符串,说明安装成功。
六、安装Head插件
「什么是Head:」
ElasticSearch只是后端提供各类API,那么怎么直观的使用它呢?ElasticSearch-head将是一款专门针对ElasticSearch的客户端工具
ElasticSearch-head配置包,下载地址:https://github.com/mobz/elasticsearch-head
「安装Head:」
注意:es5以上版本安装head须要安装node和grunt 第一步:从地址:https://nodejs.org/en/download/ 下载相应系统的msi,双击安装。 第二步:安装完成用cmd进入安装目录执行 node -v可查看版本号 能看到版本号说明node安装成功 第三步:执行 npm install -g grunt-cli 安装grunt ,安装完成后执行grunt - version查看是否安装成功,会显示安装的版本号
「配置运行:」
第一步:进入Elasticsearch安装目录下的config目录,修改elasticsearch.yml文件.在文件的末尾加入如下代码 http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: true 而后去掉 network.host: 192.168.0.1的注释并改成network.host: 0.0.0.0, 去掉cluster.name;node.name;http.port的注释(也就是去掉#) 第二步:双击elasticsearch.bat重启Elasticsearch 第三步:在https://github.com/mobz/elasticsearch-head中下载head插件,选择下载zip 第四步:解压到指定文件夹下,D:\environment\elasticsearch-head-master 进入该文件夹,修改D:\environment\elasticsearch-head-master\Gruntfile.js 在对应的位置加上hostname:’*’。 connect: { server: { options: { hostname:'*', port: 9100, base: '.', keepalive: true } } } 第五步: 打开cmd命令行窗口 ,在D:\environment\elasticsearch-head-master 下执行npm install 安装 完成后执行grunt server 或者npm run start 运行head插件,若是运行不成功建议从新安装grunt。
「安装完成:」
打开浏览器访问:http://127.0.0.1:9100
「安装lk分词器:」
ik分词器ip:http://www.oschina.net/news/2660
ElasticSearch默认采用的分词器,是单个字分词,效果不好,因此咱们须要安装一个更实用的分词器,这里采用IK分词器
下载 注意:你的Elasticsearch和IK分词器必须版本统一 源码下载地址:https://github.com/medcl/elasticsearch-analysis-ik/tree/6.2.x jar包下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases 安装 无需安装,解压便可使用 咱们将其更名为ik,并复制到Elasticsearch的解压目录下的plugins下面 重启elasticSearch便可
七、SpringBoot整合ElasticSearch
「构建SpringBoot工程,并导入依赖:」
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
「编写实体类,对应ElasticSearch中的document:」
// 表示此类对应es中的一条数据 type:至关于mysql中的表 indexName:至关于mysql中的数据库 @Document(type = "docs",indexName = "yx") public class User implements Serializable { @Id //主键映射 private int userId; @Field(type = FieldType.Text) //成员映射,type:表示数据类型 private String userName; @Field private double price;
「测试(前提ElasticSearch客户端以及服务器所有安装完备):」
一、测试类中对应操做es的对象是ElasticsearchTemplate 使用详见https://blog.csdn.net/chen_2890/article/details/83895646 二、工程化测试 2.1新建service以及serviceimpl 2.3声明接口extends ElasticsearchRepository<User,Integer>,第一个参数表示实体类(document),第二个参数表示实体对象主键的包装类 2.4新建controll 2.5启动服务器访问地址
「ElasticSearch常见方法使用:」
//根据价格区间查询 @Test public void queryByPrice(){ // List<User> users = userRepository.findByPriceBetween(12.3,13); // for (int i = 0; i < users.size(); i++) { // System.out.println(users.get(i)); // } //查询12.3以前的 // List<User> users = userRepository.findByPriceBefore(12.3); // System.out.println(users); List<User> users = userService.findByPriceBetween(12.3,0); for (User u :users) { System.out.println(u); } } //自定义查询之分页查询 @Test public void queryByPages(){ //建立构建器 NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); //添加基本分词查询,fuzzyQuery模糊查询 queryBuilder.withQuery(QueryBuilders.fuzzyQuery("userName", "羽")); // 分页: int page = 1; int size = 2; queryBuilder.withPageable(PageRequest.of(page,size)); Page<User> users = userRepository.search(queryBuilder.build()); System.out.println("总条数是:"+users.getTotalElements()); System.out.println("总页数是:"+users.getTotalPages()); System.out.println("当前页是:"+users.getNumber()); System.out.println("每一页的数量是"+users.getSize()); for (User user:users) { System.out.println(user); } } //查询排序 @Test public void searchAndSort(){ //构建查询 NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); //模糊查询 queryBuilder.withQuery(QueryBuilders.fuzzyQuery("userName", "羽")); //构建排序 queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC)); Page<User> users = userRepository.search(queryBuilder.build()); for (User user:users) { System.out.println(user); } }
本篇关于ElasticSearch的介绍就先到这里结束了,后续会出更多关于ElasticSearch系列更多文章,谢谢你们支持!
若是你以为浅羽的文章对你有帮助的话,请在微信搜索并关注「 浅羽的IT小屋 」微信公众号,我会在这里分享一下计算机信息知识、理论技术、工具资源、软件介绍、后端开发、面试、工做感想以及一些生活随想等一系列文章。所见所领,皆是生活。慢慢来,努力一点,你我共同成长...
我创建了一个技术群,若是你想了解到更多关于IT行业的技术以及生活中遇到的问题,欢迎小伙伴进群交流,只需添加个人微信,备注进群便可,期待大家的加入。
往期推荐
玩转Redis|学会这10点让你分分钟拿下Redis,知足你的一切疑问
干货|SpringBoot JMS(ActiveMQ)API实践应用详解
浅羽
留言区
点个赞,证实你还爱我