版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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_181
4、 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/bin
5、./elasticsearchcan not run elasticsearch as root解决方案:因为安全问题 elasticsearch不让用 root 用户直接运行,所以要创建新用户第一步:liunx 创建新用户 adduser然后给创建的用户加passwd输入两次。第二步:切换刚才创建的用户 su然后执行 elasticsearch 会显示 Permisdenied 权限不足。第三步:给新建的赋权限,od 777 * 这个不行,因为这个用户本身就没限,肯定自己不能给自己付权限。所以要用 root 用户登录付权限。第四步:root 给赋权限,n -R/你的 elasticsearc
6、h 安装目录。然后执行成功。创建一个分组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 confvm max_map_count=655360 sysctl pmax file descriptors 4096
7、 for elasticsearch 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 环境
8、安装 KibanaKibana 是一个开源的分析和可视化你用 Kibana 来搜索,查看,并和,设计用于和Elasticsearch 一起工作。在Elasticsearch 索引中的数据进行交互。你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。 Kibana 使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch 查询的变化。重启服务器即可Kibana 环境安装Tar-zxvf kibana-6.4.3-linux-x86_64.tar.gzvim config/kibana.yml# 将默认配置改成
9、如下:servort: 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
11、/mymayiktapplication.yml实体类层(indexName = mymayikt, type = user) Datapublic claserEntity Idprivate String id;spring:data:elasticsearch:#集群名称 cluster-name: myes #地址cluster-nodes: 51:93002.0.0.RELEASE .springframework.bootspring-boot-starter-web.springframework.bootspring-boot-starter-data-elasticsearc
12、jectlomboklombok类层控制器层启动项目SpringBootApplicationEnableElasticsearchReitories(basePackages = com.mayikt.reitory)public class AppEs RestControllerpublic class EsController Autowiredprivate UserReiory userReiory;RequestMap(/addUser)public UserEntity addUser(RequestBody UserEntity user) return userR
13、eiory.save(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.
14、yml : myes9300 与 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 请求 searc
15、h倒排索引正向索引倒排索引正排索引是从文档到关键字的(已知关键字求文档)。(已知文档求关键字),倒排索引是从关键字到文档的倒排表以字或词为关键字进行索引,表中关键字所对应的 表项 了出现这个字或词的所有文档,一个表项就是一个字表段,它 该文档的 ID 和字符在该文档中出现的位置情况。由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和 都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在 进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率。正排表是以文档的 ID 为关键字,表中文
16、档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于;因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除。但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。尽管正排表的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。文档内容:倒排索引会对以上文档内容进行分词,可以使用关键次直接定位到文档内容。高级查询根
17、据 id 进行查询GET /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 和 ag
19、e 字段GET /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使用 filter 过滤分词器什么是分词器因为 Elasticsearch 中默认的标准分词器分词器对中文分词不是很友好,会将中文词语拆分成一个一个中文的汉子。因此引入中
21、文分词器-es-ik 插件GET /mymayikt/user/_searchquery: bool: must: match_all: ,filter: range: age: gt: 21,lte: 51,from: 0,size: 10,_source: name, age演示传统分词器地址:/medcl/elasticsearch-ysis-ik/releases注意: es-ik 分词插件版本一定要和 es 安装的版本对应第一步:es 的 IK 插件(资料中有)命名改为 ik 插件第二步: 上传到/usr/local/elasticsearch-6.4.3/plugins第三步: 重
22、启 elasticsearch 即可yze yzer: standard, text: 奥迪a4ltokens: token: 奥,start_offset: 0,end_offset: 1,type: ,ition: 0,token: 迪,start_offset: 1,end_offset: 2,type: ,ition: 1,token: a4l,start_offset: 2,end_offset: 5,type: ,ition: 2自定义扩展字典在/usr/local/elasticsearch-6.4.3/plugins/ik/config 目录下vi custom/new_wor
23、d.dic老铁王者荣耀洪荒之力共有产权房yzeyzer: 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 中的(
24、Map)用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器及属性等等。文档就是给文档中的字段指定字段类型、分词器。使用 GET /mymayikt/user/_map的分类动态知道,在关系数据库中,需要事先创建数据库,然后在该数据库实例下创建数据表,然后才能在该数据表中数据。而 ElasticSearch 中不需要事先定义(Map),文档。写入 ElasticSearch 时,会根据文档字段自动识别类型,这种机制称之为动态IKyzer 扩展配置custom/new_word.dic!- words_location -!- words_location -静态在 ElasticSea
25、rch 中也可以事先定义好,包含文档的各个字段及其类型等,这种方式称之为静态。ES 类型支持基本类型符串:string,string 类型包含 text 和 keyword。text:该类型被用来索引长文本,在创建索引前会将这些文本进行分词,转化为词的组合,建立索引;允许 es 来检索这些词,text 类型不能用来排序和聚合。keyword:该类型不需要进行分词,可以被用来检索过滤、排序和聚合,keyword 类型自读那只能用本身来进行检索(不可用 text 分词后的模糊检索)。注意: keyword 类型不能分词,Text 类型可以分词查询数指型:long、eger、short、byte、d
26、ouble、float日期型:date型:二进制型: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数目,该值会一直增加
27、,不会因为过滤条件而减少mapper-murmur3附加类型(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:e
28、ger,sex:type:eger,name: type:text,yzer:ik_smart, search_yzer:ik_smart,car:type:keyword请求地址/索引/_settingsES 集群管理ES 是如何解决高并发ES 是一个分布式全文检索框架,隐藏了复杂的处理机制,分片负载均衡请求路由。内容 分片机制、集现、ES 基本概念名词Cluster代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过产生的,主从节点是对于集群内部来说的。es 的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看 es 集群,在逻辑上是个整体,你与任何一个节点的通信和与整个 es 集群通信是等价的。Shards代表索引分片,es 可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。并且索引创建后不能更改。分布式搜索。分片的数量只能在索引创建前指定,replicas代表索引副本,es 可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高 es 的查询效率,es 会自动对搜索请求进行负载均衡。Recovery代表数据恢复或叫数据重新分布,es 在有节点加入或退出时会根据机器的负载对索
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河北省廊坊市安次区数学三下期末联考试题(含答案解析)
- PTC培训进阶试题及答案
- DB43-T 3467-2025镉低积累辣椒品种评价技术规程
- 解析函数难点试题与参考答案
- 小雨语文考试题目及答案详情
- 品质部知识竞赛试题及答案
- 权益保护综合试题及详细答案解析
- 脊柱损伤患者的翻身技巧
- 急性乳房炎病人的护理
- 主斜井井口电气焊作业专项安全技术措施培训
- 气瓶检测站安全应急预案
- 拆除工程应急预案
- 中建施工临时用电施工方案
- 体育学院《体育教学论-体育教学目标》课件
- 电磁场与电磁波(第五版)PPT完整全套教学课件
- 盘锦市住宅区物业管理服务收费等级标准实用文档
- 水准点、导线点复测记录自动公式表
- GA 883-2018公安单警装备强光手电
- 七年级班主任开学第一课(班会)课件
- 相机采购报价单
- 公路互通立交设计某市政院ppt讲解
评论
0/150
提交评论