当前位置: 首页 > 科技观察

ES开发指南|如何开始使用ElasticSearch

时间:2023-03-20 19:03:52 科技观察

前言ElasticSearch不仅是全文搜索引擎的领导者,也是各大厂商的标配大数据平台之一。它广泛应用于搜索加速、用户标签、画像系统、向量搜索等领域,它不是传统的关系型数据库,但在这个信息爆炸、数据积累的时代,我们获取知识的方式发生了巨大的变化。搜索和提问已成为获取知识的首要手段。ElasticSearch工程师的要求不低于甚至超过DBA的要求。那么,如何才能成为公认的ElasticSearch工程师呢?希望这篇文章能够站在开发工程师的角度对你有所帮助。1、全文搜索《Lucence简单介绍:》在此之前先说说Lucence,它是Apache软件基金会发布的开源全文搜索引擎工具包,由资深全文搜索专家DougCutting编写,它是一个全文搜索引擎架构,提供完整的索引创建和查询索引,以及部分文本分析引擎。Lucence的目的是为软件开发者提供一个简单易用的工具包,方便在目标系统中实现全文搜索功能,或者以此为基础构建一个完整的全文搜索引擎。Lucence是全文搜索领域的经典始祖,现在很多搜索引擎都是在它的基础上创建的,思想相通。Lucence是一个基于关键字进行搜索的文本搜索工具。只能搜索某个网站内的文本内容,不能跨网站搜索。如果想了解更多关于Lucence的知识,可以参考以下博客https://www.cnblogs.com/ysdrzp/p/10009660.html2.什么是ElasticSearch?常用的存储方式也是搜索引擎的核心内容。在搜索引擎的实际应用中,有时需要根据关键字的某些值来查找记录,因此根据关键字建立索引。这个索引是倒排索引。《ElasticSearch概念:》ElasticSearch是一个基于Lucence的全文搜索服务器,用java语言编写,提供分布式搜索引擎,安装简单,使用方便3.ElasticSearch可以做什么?京东...基于索引数据存储4.Elastic有哪些产品《主要产品:》E(ElasticSearch)L(logstash)K(Kibana)B(Beats)5.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数据串,说明安装成功。6、安装Head插件《WhatisHead:》ElasticSearch只是在后端提供了各种API,那么如何直观的使用呢?ElasticSearch-head将是一个专门针对ElasticSearch的客户端工具ElasticSearch-head配置包,下载地址:https://github.com/mobz/elasticsearch-head"InstallHead:"注:es5以上版本安装head需要安装node和grunt第一步:从地址:https://nodejs.org/en/download/下载对应系统的msi,双击安装。第二步:安装完成后,使用cmd进入安装目录,执行node-v查看版本号。如果能看到版本号,则节点安装成功。第3步:执行npminstall-ggrunt-cli安装grunt。安装完成后,执行grunt-version查看是否安装成功,会显示安装的版本号。《配置并运行:》第一步:进入Elasticsearch安装目录下的config目录,修改elasticsearch.yml文件。在文件末尾添加以下代码http.cors.enabled:truehttp.cors。allow-origin:"*"node.master:truenode.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下执行npminstall,安装完成后执行gruntserver或npmrunstart运行head插件。如果运行失败,建议重新安装grunt。《安装完成:》打开浏览器访问:http://127.0.0.1:9100《安装lk分词器:》ik分词器ip:http://www.oschina.net/news/2660ElasticSearch使用的分词器默认,是单字符分词,效果很差,所以我们需要安装一个比较实用的分词器,这里是IK分词器下载注意:你的Elasticsearch和IK分词器必须有统一版本的源码代码下载地址:https://github.com/medcl/elasticsearch-analysis-ik/tree/6.2.xjar包下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases不需要安装待安装,解压后即可使用我们将其重命名为ik,并将其复制到Elasticsearch解压目录下的plugins中,并重启elasticSearch。7.SpringBoot集成ElasticSearch《构建SpringBoot工程并导入依赖:》org.springframework.bootspring-boot-starter-data-elasticsearch》写实体类,对应ElasticSearch中的document:"//表示该类型对应es中的一条数据"yx")publicclassUserimplementsSerializable{@Id//主键映射privateintuserId;@Field(type=FieldType.Text)//成员映射,type:表示数据类型privateStringuserName;@Fieldprivatedoubleprice;《测试(前提是ElasticSearch客户端和服务端都安装好了):》1.测试类操作es对应的对象是ElasticsearchTemplate。详见https://blog.csdn.net/chen_2890/article/details/838956462,工程测试2.1新增服务和serviceimpl2.3声明接口extendsElasticsearchRepository,第一个参数表示实体类(document),第二个参数表示实体对象主键的包装类2.4新建controll2.5启动服务端访问地址"ElasticSearch常用方法用法:"//根据价格范围查询@TestpublicvoidqueryByPrice(){//Listusers=userRepository.findByPriceBetween(12.3,13);//for(inti=0;iusers=userRepository.findByPriceBefore(12.3);//System.out.println(users);Listusers=userService.findByPriceBetween(12.3,0);for(Useru:users){System.out.println(u);}}//自定义查询的分页查询@TestpublicvoidqueryByPages(){//创建builderNativeSearchQueryBuilderqueryBuilder=newNativeSearchQueryBuilder();//添加基础分词查询,fuzzyQuery模糊查询queryBuilder.withQuery(QueryBuilders.fuzzyQuery("userName","Yu"));//分页:intpage=1;intsize=2;queryBuilder.withPageable(PageRequest.of(页面,大小));页面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(Useruser:users){System.out.println(user);}}//查询排序@TestpublicvoidsearchAndSort(){//构建查询NativeSearchQueryBuilderqueryBuilder=newNativeSearchQueryBuilder();//模糊查询queryBuilder.withQuery(QueryBuilders.fuzzyQuery("userName","Yu"));//构建排序queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC));Pageusers=userRepository.search(queryBuilder.build());for(Useruser:users){System.out.println(user);}}结语ElasticSearch的文章到此结束,更多ElasticSearch系列文章稍后发布,感谢您的支持!