ES开发指南|如何快速上手ElasticSearch

系统
ElasticSearch不只是全文检索引擎的领头羊,现在也是各个大厂标配的大数据平台之一,被广泛用于搜索加速,用户标签、画像系统、向量搜索等领域,它不是传统的关系型数据库,但这个信息爆炸,数据堆积的时代,我们获取知识的方式已经极大的改变,搜索、提问成了获取知识的第一手段。对ElasticSearch工程师的要求已经不亚于甚至超过了对DBA的要求。那么,要如何才能成为一个被认可的ElasticSearch工程师?希望这篇文章能够从一个开发工程师的角度,给大家带来帮助。

 前言

ElasticSearch不只是全文检索引擎的领头羊,现在也是各个大厂标配的大数据平台之一,被广泛用于搜索加速,用户标签、画像系统、向量搜索等领域,它不是传统的关系型数据库,但这个信息爆炸,数据堆积的时代,我们获取知识的方式已经极大的改变,搜索、提问成了获取知识的第一手段。对ElasticSearch工程师的要求已经不亚于甚至超过了对DBA的要求。那么,要如何才能成为一个被认可的ElasticSearch工程师?希望这篇文章能够从一个开发工程师的角度,给大家带来帮助。

1、全文检索

「Lucence的简单入门:」

  • 在此之前我们先谈谈Lucence,它是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引和查询索引,以及部分文本分析的引擎。
  • Lucence的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎,Lucence在全文检索领域是一个经典的祖先,现在很多检索引擎都在其基础上创建的,思想是相通的。
  • Lucence是根据关键字来搜索的文本搜索工具,只能在某个网站内容搜索文本内容,不能跨网站搜索。
  • 想进一步了解Lucence的可以下面博客查阅

https://www.cnblogs.com/ysdrzp/p/10009660.html

2、ElasticSearch是什么?

「倒排索引原理:」

  • 倒排索引是目前搜索引擎公司对搜索引擎最常用的存储方式,也是搜索引擎的核心内容,在搜索引擎的实际应用中,有时需要按照关键字的某些值查找记录,所以是按照关键字建立索引,这个索引就是倒排索引

「ElasticSearch概念:」

  • ElasticSearch是一个基于Lucence的全文搜索服务器,java语言编写,提供了分布式的搜索引擎,安装方便,使用简单

3、ElasticSearch能干什么?

「主要用途:」

  • 分布式下首页搜索,如百度,淘宝,京东...
  • 基于索引数据存储

4、Elastic有哪些产品

「主要产品:」

  • E(ElasticSearch)
  • L(logstash)
  • K(Kibana)
  • B(Beats)

5、ElasticSearch的安装以及使用

「安装ElasticSearch:」

  1. Elasticsearch官网:https://www.elastic.co/cn/products/elasticsearch 
  2. 下载地址:https://www.elastic.co/downloads/past-releases 
  3. 安装Elasticsearch前提条件:JDK1.8及以上 

「安装:」

  • ElasticSearch无需安装,解压即用

「运行:」

  1. 进入elasticsearch/bin目录,双击可执行文件elasticsearch.bat 
  2. 可以看到绑定了两个端口: 
  3. 9300:Java程序访问的端口 
  4. 9200:浏览器、postman访问的端口 
  5. 我们在浏览器中访问:http://127.0.0.1:9200,出现json数据字符串,说明安装成功。 

6、安装Head插件

「什么是Head:」

  • ElasticSearch只是后端提供各种API,那么怎么直观的使用它呢?ElasticSearch-head将是一款专门针对ElasticSearch的客户端工具
  • ElasticSearch-head配置包,下载地址:https://github.com/mobz/elasticsearch-head

「安装Head:」

  1. 注意:es5以上版本安装head需要安装node和grunt 
  2. 第一步:从地址:https://nodejs.org/en/download/ 下载相应系统的msi,双击安装。 
  3. 第二步:安装完成用cmd进入安装目录执行 node -v可查看版本号 
  4.                能看到版本号说明node安装成功 
  5. 第三步:执行 npm install -g grunt-cli 安装grunt ,安装完成后执行grunt   - version查看是否安装成功,会显示安装的版本号  

「配置运行:」

  1. 第一步:进入Elasticsearch安装目录下的config目录,修改elasticsearch.yml文件.在文件的末尾加入以下代码 
  2. http.cors.enabled: true  
  3. http.cors.allow-origin: "*" 
  4. node.master: true 
  5. node.data: true 
  6. 然后去掉 
  7. network.host: 192.168.0.1的注释并改为network.host: 0.0.0.0, 
  8. 去掉cluster.name;node.name;http.port的注释(也就是去掉#) 
  9.  
  10. 第二步:双击elasticsearch.bat重启Elasticsearch 
  11.  
  12. 第三步:在https://github.com/mobz/elasticsearch-head中下载head插件,选择下载zip 
  13.  
  14. 第四步:解压到指定文件夹下,D:\environment\elasticsearch-head-master 进入该文件夹,修改D:\environment\elasticsearch-head-master\Gruntfile.js 在对应的位置加上hostname:’*’。 
  15. connect: { 
  16.    server: { 
  17.     options: { 
  18.      hostname:'*'
  19.      port: 9100, 
  20.      base: '.'
  21.      keepalive: true 
  22.     } 
  23.    } 
  24.   } 
  25.  
  26. 第五步: 
  27. 打开cmd命令行窗口 ,在D:\environment\elasticsearch-head-master 下执行npm install 安装 
  28. 完成后执行grunt server 或者npm run start 运行head插件,如果运行不成功建议重新安装grunt。 

「安装完成:」

  • 打开浏览器访问:http://127.0.0.1:9100

「安装lk分词器:」

  • ik分词器ip:http://www.oschina.net/news/2660
  • ElasticSearch默认采用的分词器,是单个字分词,效果很差,所以我们需要安装一个更实用的分词器,这里采用IK分词器
  1. 下载 
  2. 注意:你的Elasticsearch和IK分词器必须版本统一 
  3. 源码下载地址:https://github.com/medcl/elasticsearch-analysis-ik/tree/6.2.x 
  4.  
  5. jar包下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases 
  6.  
  7. 安装 
  8. 无需安装,解压即可使用 
  9. 我们将其改名为ik,并复制到Elasticsearch的解压目录下的plugins下面 
  10.  
  11. 重启elasticSearch即可 

7、SpringBoot整合ElasticSearch

「构建SpringBoot工程,并导入依赖:」

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-data-elasticsearch</artifactId> 
  4. </dependency> 

「编写实体类,对应ElasticSearch中的document:」

  1. // 表示此类对应es中的一条数据 
  2. type:相当于mysql中的表 
  3. indexName:相当于mysql中的数据库 
  4. @Document(type = "docs",indexName = "yx")  
  5. public class User implements Serializable { 
  6.     @Id     //主键映射 
  7.     private int userId; 
  8.     @Field(type = FieldType.Text)   //成员映射,type:表示数据类型 
  9.     private String userName; 
  10.     @Field 
  11.     private double price; 

「测试(前提ElasticSearch客户端以及服务器全部安装完备):」

  1. 1、测试类中对应操作es的对象是ElasticsearchTemplate 
  2.       使用详见https://blog.csdn.net/chen_2890/article/details/83895646 
  3. 2、工程化测试 
  4. 2.1新建service以及serviceimpl 
  5. 2.3声明接口extends   ElasticsearchRepository<User,Integer>,第一个参数表示实体类(document),第二个参数表示实体对象主键的包装类 
  6. 2.4新建controll 
  7. 2.5启动服务器访问地址 

「ElasticSearch常见方法使用:」

  1. //根据价格区间查询 
  2.     @Test 
  3.     public void queryByPrice(){ 
  4.  
  5. //       List<User> users = userRepository.findByPriceBetween(12.3,13); 
  6. //        for (int i = 0; i < users.size(); i++) { 
  7. //            System.out.println(users.get(i)); 
  8. //        } 
  9.         //查询12.3之前的 
  10. //        List<User> users = userRepository.findByPriceBefore(12.3); 
  11. //        System.out.println(users); 
  12.         List<User> users = userService.findByPriceBetween(12.3,0); 
  13.         for (User u :users) { 
  14.             System.out.println(u); 
  15.         } 
  16.     } 
  17.  
  18.     //自定义查询之分页查询 
  19.     @Test 
  20.     public void queryByPages(){ 
  21.         //创建构建器 
  22.         NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); 
  23.  
  24.         //添加基本分词查询,fuzzyQuery模糊查询 
  25.         queryBuilder.withQuery(QueryBuilders.fuzzyQuery("userName""羽")); 
  26.  
  27.         // 分页: 
  28.         int page = 1; 
  29.         int size = 2; 
  30.         queryBuilder.withPageable(PageRequest.of(page,size)); 
  31.  
  32.         Page<User> users = userRepository.search(queryBuilder.build()); 
  33.         System.out.println("总条数是:"+users.getTotalElements()); 
  34.         System.out.println("总页数是:"+users.getTotalPages()); 
  35.         System.out.println("当前页是:"+users.getNumber()); 
  36.         System.out.println("每一页的数量是"+users.getSize()); 
  37.  
  38.         for (User user:users) { 
  39.             System.out.println(user); 
  40.         } 
  41.     } 
  42.  
  43.     //查询排序 
  44.     @Test 
  45.     public void searchAndSort(){ 
  46.         //构建查询 
  47.         NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); 
  48.         //模糊查询 
  49.         queryBuilder.withQuery(QueryBuilders.fuzzyQuery("userName""羽")); 
  50.         //构建排序 
  51.         queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC)); 
  52.         Page<User> users = userRepository.search(queryBuilder.build()); 
  53.         for (User user:users) { 
  54.             System.out.println(user); 
  55.         } 
  56.     } 

结语

本篇关于ElasticSearch的介绍就先到这里结束了,后续会出更多关于ElasticSearch系列更多文章,谢谢大家支持!

 

责任编辑:姜华 来源: 浅羽的IT小屋
相关推荐

2023-06-13 08:00:57

ChatGPT语言模型

2021-09-03 11:26:39

分词器ElasticSear

2024-03-26 00:00:01

2024-01-29 00:36:50

Backstage设施工具

2011-07-25 16:21:22

Sencha touc

2022-08-02 08:01:09

开发插件Chrome前端技术

2014-12-12 10:25:21

Xcode 6iOS快速上手

2014-08-01 09:57:52

Node.jsNode.js插件

2021-11-26 09:40:37

EclipseIDEA开发

2012-03-26 09:27:40

谷歌安卓开发谷歌安卓

2011-06-09 18:24:36

QT Wince

2023-05-15 18:44:07

前端开发

2009-06-24 16:30:21

JSF组件模型

2022-08-19 07:13:45

SQL方法编程

2013-11-19 12:53:33

OA信息化

2015-11-12 16:14:52

Python开发实践

2015-12-16 10:30:18

前端开发指南

2019-10-31 08:00:00

机器学习人工智能AI

2010-06-13 09:27:56

Widget开发

2021-08-09 09:47:34

Blazor 路由开发
点赞
收藏

51CTO技术栈公众号