付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Elasticsearch 简单介绍Elasticsearch (ES)是一个基于 Lucene 构建的开源、分布式、RESTful 接口全文搜索引擎。Elasticsearch 还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器以及处理 PB 级的数据。它可以在很短的时间内在储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的发。Elasticsearch 就是为高可用和可扩展而生的。可以通过购置性能更强的服务器来完成。Elasticsearch 优势横向可扩展性:只需要增加台服务器,做一点儿配置,启动一下 Elasticsearch 就可
2、以并入集群。分片机制提供更好的分布性:同一个索引分成多个分片(sharding),这点类似于 HDFS 的块机制;分而治之的方式可处理效率。高可用:提供(replica)机制,一个分片可以设置多个,使得某台服务器在宕机的情况下,集群仍旧可以照常运行,并会把服务器宕机丢失的数据信息恢复到其他可用节点上。口使用简单:共需一条命令就可以引擎。文件,然后很快就能搭建一一个站内搜索Elasticsearch 应用场景大型分布式日志分析系统 ELK示数据)大型商品搜索系统、网盘搜索引擎等。结构ElasticsearchElasticsearch 是文件,Elasticsearch 是面向文档型数据库,一条
3、数据在这里就是一个文档,用 JSON 作为文档序列化的格式,比如下面这条用户数据:关系数据库Elasticsearch 数据库 表 索引(Index) 行 列(Columns) 类型(type) 文档(Docments) 字段(Fields)Linux 环境安装 Elasticsearch1、 安装 JDK 环境变量2、elasticsearch 安装包elasticsearch 安装包文档注意:linux 安装内存建议 1g 内存以上3、 上传 elasticsearch 安装包4、 解压 elasticsearchexport JAVA_HOME=/usr/local/jdk1.8.0_1
4、81 export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarsource /etc/profilename :yushengjun,sex :0,age :25elasticsearch(日志)+logstash(收集日志)+kibana(展5、 修改 elasticsearch.ymlnetwork.host: 51http.port: 92006、 启动 elasticsearch 报错Cd /usr/local/elasticsearch-6.4.3/b
5、in./elasticsearchcan not run elasticsearch as root解决方案:因为安全问题elasticsearch不让用root 用户直接运行,所以要创建新用户第一步:liunx 创建新用户 adduser然后给创建的用户加passwd输入两次。第二步:切换刚才创建的用户 su然后执行elasticsearch 会显示Permisdenied 权限。第三步:给新建的赋权限,od 777 * 这个,因为这个用户本身就没限,肯定自己不能给自己付权限。所以要用root 用户登录付权限。第四步:root 给赋权限,n -R/你的elasticsearch 安装目录。然
6、后执行成功。创建一个分组groupadd esmayiktuseradd esyushengjun -g esmayikt -p 123456n -R esyushengjun:esmayikt elasticsearch-6.4.3 su esyushengjun 切换用户继续报错bootstrap checks failed max virtual memory areas vm.max_map_count 65530 isvi /etc/sysctl.conf vm.max_map_count=655360 sysctl pmax file descriptors 4096 for el
7、asticsearch pros is too low, increase toeast 65536 vi /etc/security/limits.confsoft nofile 65536hard nofile 131072soft nproc 2048hard nproc 4096tar -zxvf elasticsearch-6.4.3.tar.gz7、elasticsearch关闭systemctlstopfirewalld.service9300 与 9200 区别9300 端口: ES 节点之间通讯使用9200 端口: ES 节点 和 外部 通讯使用Linux 环境安装 Kiba
8、naKibana 是一个开源的分析和可视化你用 Kibana 来搜索,查看,并和,设计用于和 Elasticsearch 一起工作。在 Elasticsearch 索引中的数据进行交互。你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。 Kibana 使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示 Elasticsearch 查询的变化。重启服务器即可Kibana 环境安装Tar-zxvf kibana-6.4.3-linux-x86_64.tar.gzvim config/kibana.yml# 将默认配置改成如下:s
9、ervort: 5601server.host: 51elasticsearch.url: http:/ 51:9200启动 Kibana./bin/kibanaKibana 实现增删改查#创建索引 PUT /mymayikt#查询索引 GET /mymayikt#添加文档 /索引名称/类型/id PUT /mymayikt/user/1name:yushengjun, sex:0,age:22#查询文档GET /mymayikt/user/1本控制Elasticsearc1.为什么要进行版本控制为了保证数据再多线程操作下的准确性2.悲观锁和乐观锁悲观锁:假设会发生并发,一切可能数据准确性的操
10、作悲观锁:假设不会发生并发,只在提交操作是检查是否数据完整性。3.版本控制和外部版本控制版本控制:_ver自增长,修改数据后,_ver会自动的加 1外部版本控制:为了保持_ver与外部版本控制的数值一致使用 ver_type=external 检查数据当前的 ver值是否小于请求中的 ver值SpringBoot 整合 Elasticsearchmaven 依赖.springframework.bootspring-boot-startarentPUT /mymayikt/user/1?ver=2name:yushengjun, sex:0,age:22#删除索引 DELETE /mymayi
11、ktapplication.yml实体类层(indexName = mymayikt, type = user) Datapublic claserEntity Idprivate String id;spring:data:elasticsearch:#集群名称 cluster-name: myes #地址cluster-nodes: 51:93002.0.0.RELEASE .je
12、ctlomboklombok类层控制器层启动项目SpringBootApplicationEnableElasticsearchReitories(basePackages = com.mayikt.reitory)public class AppEs RestControllerpublic class EsController Autowiredprivate UserReiory userReiory;RequestMap(/addUser)public UserEntity addUser(RequestBody UserEntity user) return userReiory.s
13、ave(user);RequestMap(/findUser)public Optional findUser(String id) return userReiory.findById(id);publicerface UserReiory extends CrudReitory private String name;privatesex;privateage;报错以下错误None of the configured nodes are available:解决方案:Vi /usr/local/elasticsearch-6.4.3/config/elasticsearch.yml : m
14、yes9300 与 9200 区别9300 与 9200 区别9300 端口: ES 节点之间通讯使用9200 端口: ES 节点 和 外部 通讯使用9300 是 TCP 协议端,ES 集群之间通讯端ES RESTful 接口端9200 端,调用 RESTful 创建文档/索引/类型/id注意发送请求为t 类型查询文档发送 get 请求name:mayikt, age:30,sex:0public sic void main(String args) SpringApplication.run(AppEs.class, args);查询某类型全部文档发送 get 请求倒排索引正向索引倒排索引正
15、排索引是从文档到关键字的(已知关键字求文档)。(已知文档求关键字),倒排索引是从关键字到文档的倒排表以字或词为关键字进行索引,表中关键字所对应的 表项 了出现这个字或词的所有文档,一个表项就是一个字表段,它 该文档的 ID 和字符在该文档中出现的位置情况。由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和 都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在 进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率。正排表是以文档的 ID 为关键字,表中文档中每个字的位置信息,查找时
16、扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于;因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除。但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。尽管正排表的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。文档内容:倒排索引会对以上文档内容进行分词,可以使用关键次直接定位到文档内容。高级查询根据 id 进行查询GET /
17、mymayikt/user/12查询当前所有类型的文档GET /mymayikt/user/_search单词 ID单词倒排列表 docId1小1,2,3,4,52一家1,2,4,53科技公司1,2,4,54开发4,55汽车1,2,4,56奥迪1,47加速爽1,3,48保时捷2,39保时捷 9112105序号文档内容1是一家科技公司创始汽车是奥迪 a8l,加速爽。2是一家科技公司的前台,开的汽车是保时捷 9113买了的保时捷 911,加速爽。4是一家科技公司开发主管,开的汽车是奥迪 a6l,加速爽。5是一家科技公司开发,开的汽车是速锐,加速有点慢根据多个 ID 批量查询查询多个 id 分别为
18、1、2 GET /mymayikt/user/_mgetids:1,2复杂条件查询查询为21 岁GET /mymayikt/user/_search?q=age:21查询30 岁-60 岁之间GET /mymayikt/user/_search?q=age30 TO 60注意:TO 一定要大写查询30 岁-60 岁之间 并且降序、从 0 条数据到第 1 条数据GET /mymayikt/user/_search?q=age30 TO 60&sort=age:desc&from=0&size=1查询30 岁-60 岁之间 并且降序、从 0 条数据到第 1 条数据,展示name 和 age 字段G
19、ET /mymayikt/user/_search?q=age30 TO 60&sort=age:desc&from=0&size=1&_source=name,ageDsl 语言查询与过滤DSL 语言es 中的查询请求有两种方式,一种是简易版的查询,另外一种是使用 JSON 完整的请求体,叫做结构化查询(DSL)。由于 DSL 查询更为直观也更为简易,所以大都使用这种方式。DSL 查询是T 过去一个 json,由于有很多形式。t 的请求是 json 格式的,所以存在很多灵活性,也根据名称精确查询#term 是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇根据汽车名称模糊查询#
20、match 查询相当于模糊匹配,只包含其中一部分就行Term 查询不会对字段进行分词查询,会采用精确匹配。Match 会根据该字段的分词器,进行分词查询。Term 与 Match 区别GET /mymayikt/user/_searchfrom: 0,size: 2,query: match: car: 奥迪GET mymayikt/user/_searchquery: term: name: xiaoming分词器分词器因为 Elasticsearch 中默认的标准分词器分词器对中文分词不是很友好,会将中文词语拆分成一个一个中文的汉子。因此引入中文分词器-es-ik 插件GET /mymay
21、ikt/user/_searchquery: bool: must: match_all: ,filter: range: age: gt: 21,lte: 51,from: 0,size: 10,_source: name, age使用 filter 过滤演示传统分词器地址:/medcl/elasticsearch-ysis-ik/releases注意: es-ik 分词插件版本一定要和 es 安装的版本对应第一步:es 的 IK 插件(资料中有)命名改为 ik 插件第二步: 上传到/usr/local/elasticsearch-6.4.3/plugins第三步: 重启 elasticse
22、arch 即可 yzer: standard, text: 奥迪 a4ltokens: token: 奥,start_offset: 0,end_offset: 1,type: ,token: 迪,start_offset: 1,end_offset: 2,type: ,token: a4l,start_offset: 2,end_offset: 5,type: ,ition: 2ition: 1ition: 0自定义扩展字典在/usr/local/elasticsearch-6.4.3/plugins/ik/config 目录下vi custom/new_word.dic老铁王者荣耀洪荒之力
23、共有房yzer: ik_smart,text: 奥迪tokens: token: 奥迪, start_offset: 0,end_offset: 2, type: CN_WORD,ition: 0,token: a4l, start_offset: 2,end_offset: 5, type: LETTER,ition: 1vi IKyzer.cfg.xml文档已经把 ElasticSearch 的概念和关系数据库做了一个对比,索引(index)相当于数据库,类型(type)相当于数据表,(Map)相当于数据表的表结构。ElasticSearch 中的(Map)用来定义一个文档,可以定义所包含
24、的字段以及字段的类型、分词器及属性等等。文档就是给文档中的字段指定字段类型、分词器。使用 GET /mymayikt/user/_map的分类动态知道,在关系数据库中,需要事先创建数据库,然后在该数据库实例下创建数据表,然后才能在该数据表中数据。而 ElasticSearch 中不需要事先定义(Map),文档。写入 ElasticSearch 时,会根据文档字段自动识别类型,这种机制称之为动态IKyzer 扩展配置custom/new_word.dic!- words_location -!- words_location -静态在 ElasticSearch 中也可以事先定义好,包含文档的各
25、个字段及其类型等,这种方式称之为静态。ES 类型支持基本类型符串:string,string 类型包含 text 和 keyword。text:该类型被用来索引长文本,在创建索引前会将这些文本进行分词,转化为词的组合,建立索引;允许 es 来检索这些词,text 类型不能用来排序和聚合。keyword:该类型不需要进行分词,可以被用来检索过滤、排序和聚合,keyword 类型自读那只能用本身来进行检索(不可用 text 分词后的模糊检索)。注意: keyword 类型不能分词,Text 类型可以分词查询数指型:long、eger、short、byte、double、float日期型:date型
26、:二进制型:binary数组类型(Array daype)复杂类型地理坐标类型(Geo-po地理形状类型(Geo-Shdadaype):geo_po用于坐标ype):geo_sh用于类似于多边形的复杂形状特定类型(Spelised daypes)Pv4 类型(IPv4 daype):ip 用于 IPv4 地址Completion 类型(Completion daToken count 类型(Token count daype):completion 提供自动补全建议ype):token_count 用于统计做子标记的字段的 index数目,该值会一直增加,不会因为过滤条件而减少mapper-m
27、urmur3附加类型(Atta索引,例如类型:通过插件,可以通过_murmur3_来计算 index 的哈希值ent daype):采用 mapper-attaents 插件,可支持_attaents_office 格式,Open Documnet 格式, ePub,HTML 等地理位置类型(Geo daypes)yzer 索引分词器,索引创建的时候使用的分词器 比如 ik_smartSearch_yzer 搜索字段的值时,指定的分词器创建文档类型并且指定类型T /mymayikt/_map/useruser: properties:age:type:eger,sex:type:eger,na
28、me: type:text,yzer:ik_smart, search_yzer:ik_smart,car:type:keyword请求地址/索引/_settingsES 集群管理ES 是如何解决高并发ES 是一个分布式全文检索框架,隐藏了复杂的处理机制,分片负载均衡请求路由。内容 分片机制、集现、ES 基本概念名词Cluster代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过产生的,主从节点是对于集群来说的。es 的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看 es 集群,在逻辑上是个整体,你与任何一个节点的通信和与整个 es
29、 集群通信是等价的。Shards代表索引分片,es 可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上并且索引创建后不能更改。分布式搜索。分片的数量只能在索引创建前指定,replicas代表索引副本,es 可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高 es 的查询效率,es 会自动对搜索请求进行负载均衡。Recovery代表数据恢复或叫数据重新分布,es 在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。ES 为什么要实现集群ES 集群
30、中索引可能由多个分片,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。GET _cat/healthES 集群数据原理分析:。1、每个索引会被分成多个分片 shards 进行,默认创建索引是分配 5 个分片进行。每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为 primary shards。注意:索引的主分片 primary shards 定义好后,后面不能做修改
31、。2、为了实现高可用数据的高可用,主分片可以有对应的备分片 replics shards,replic shards 分片承载了负责容错、以及请求的负载均衡。注意: 每一个主分片为了实现高可用,都会有自己对应的备分片,主分片对应的备分片不能存放同一台服务器上。,主分片 primary shards 可以和其他 replics shards 存放在同一个 node 节点上。ES 集群环境搭建服务器环境准备三台服务器集群服务集群配置关闭systemctlstopfirewalld.service默认底层开启 9300 集群验证集群效果注意克隆 data 文件会导致数据不同步报该错误解决办法fail
32、ed to send join request to master因为克隆导致 data 文件也克隆呢,直接清除每台服务器 data 文件。vi elasticsearch.yml: myes#保证三台服务器节点集群名称相同: node-1 # 每个节点名称不一样 其他两台为 node-1 ,node-2 network.host: 80 # 实际服务器 ip 地址discovery.zen.unicast.hosts: 84, 85,86#多个服务集群 ip discovery.zen.minimum_master_nodes: 1服务器名称IP 地址node-182node-283node
33、-384*号表示为 master 节点SpringBoot 整合 ESSpringBoot 整合 ES 实现网盘搜索引擎项目环境搭建数据结构分析T /clouddisk/_map/diskdisk: properties: baiduaddres: type: keyword,browsetimes: type: long,collectiontime: type: date,describe: type: text,Maven 依赖.springframework.bootspring-boot-startarent2.0.0.RELEASE .springframework.bootspr
34、ing-boot-starter-web.springframework.bootspring-boot-starter-data-elasticsearchyzer: ik_smart,filesize: type: float,name: type: text,yzer: ik_smart,sharpeople: type: keyword,shartime: type: date,source: type: keywordapplication 信息spring:data:elasticsearch:#集群名称 cluster-name: myes #地址cluster-nodes: 8
35、0:9300 freemarker:# 设置模板后缀名suffix: .ftl # 设置文档类型content-type: text/html# 设置页面编码格式charset: UTF-8 # 设置页面缓存 cache: false# 设置ftl文件路径templaoadath:- classpath:/templates # 设置静态文件路径,js,css等 mvc:sic-path-pattern: /sic/*.projectlomboklombokcom.collections-collections1.0-rc2.springframework.bootspring-boot-st
36、arter-freemarker三层结构实体类层Data(indexName = clouddisk, type = disk)public class CloudDiskEntity /* name: 2018史上最全SpringBoot, source: 云盘, describe:2018史上最全的SpringBoot课程, shartime: 2018-10-10, browsetimes: 10,* filesize: 4.35, sharpeople: 644, collectiontime: 2018-11-24,addres: address* */ Idprivate Stri
37、ng id;/ 名称private String name;/ 来源private String source;/ 描述private String describe;/时间private Date shartime;/privaong browsetimes;/ 文件大小private Double filesize;/人private String sharpeople;/ 收录时间private String collectiontime;/ 地址private String baiduaddres;reitory 层控制层RestControllerpublic class Cloud
38、DiskController Autowiredprivate CloudDiskcloudDisk;/ springboot 整合 es 查询/ 根据id查询文档信息RequestMap(/findById/id)public Optional findById(PathVariable String id) return cloudDisk.findById(id);/ 实现分页查询RequestMap(/search)public List search(String name, String describe, PageableDefault(page = 0, value = 2)
39、Pageable pageable) / 1.创建查询对象BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();if (!StringUtils.isEmpty(name) MatchQueryBuilder matchQuery = QueryBuilders.matchQuery(name, name); boolQuery.must(matchQuery);if (!StringUtils.isEmpty(describe) MatchQueryBuilder matchQuery = QueryBuilders.matchQuery(describe, describe); boolQuery.must(matchQuery);/ 2.调用查询接口
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025~2026学年河南新未来联盟高一下学期6月测评生物试卷
- 2025~2026学年广东肇庆市高一下学期期末学业水平达标检测生物试卷
- 2026 河南 退役军人岗事业单位结构化面试
- 2026 河南 市场监管岗事业单位高频强化训练卷
- 2026年山西省职业院校技能大赛-高职组(环境检测与监测赛项)考试题库(带答案)
- 2026 湖南 政府服务中心结构化面试易错点巩固训练卷
- 2026年通信建设工程安全生产培训考试试题含答案
- 2026年ICU 颅脑损伤重症护理试卷及答案
- 《2 找相同和不同》课件2026-2027学年湘科版一年级上册科学
- 2026年《童年》测试题目及答案
- 高考语文必考语言文字运用之字词训练(含答案)
- 2027贵州航天电器秋季招聘284人考试模拟试题及答案解析
- 中国危险化学品目录(2025版)官方完整版
- 第6课 人民当家作主 第1课时 课件(内嵌视频)2026-2027学年道德与法治五年级上册统编版
- 2026年初级车险理赔试题及答案
- 高低压成套设备装配质量罚款细则
- 【完美导学】Unit 4 Humor Lesson 3 My Favourite Comedian Reading and writing workshop 课件-2022-2023学年高二英语同步备课(北师大版2019选择性必修第二册)
- 2025年全国职业院校技能大赛中职(电子产品设计与应用赛项)考试题附答案
- 2026年黑龙江绥化市中考数学卷试题真题(含答案详解)
- 充电桩生产制造项目投资计划书
- 2026中国超声波按摩器市场消费状况与竞争态势分析报告
评论
0/150
提交评论