1.ElasticSearch
1.1
ElasticSearch(简称es)
Elasticsearch是用Java开发并且是当前最盛行的开源的企业级搜索引擎。
能够到达及时搜索,稳固,可靠,快速,安装使用方便。
客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。
官方网站:
https://www.elastic.co/
下载地址:https://www.elastic.co/cn/start
1.2
ElasticSearch与Lucene的关系
Lucene可以被以为是迄今为止最先辈、性能最好的、功能最全的搜索引擎库(框
架)
但是想要使用Lucene,必须使用Java来作为开发语言并将其直接集成到你的应用
中,并且Lucene的配置及使用非常复杂,你需要深入相识检索的相干知识来理解它
是如何工作的。
Lucene缺点:
1)只能在Java项目中使用,并且要以jar包的方式直接集成项目中.
2)使用非常复杂-创建索引和搜索索引代码繁杂
3)不支持集群环境-索引数据差别步(不支持大型项目)
4)索引数据假如太多就不行,索引库和应用地点同一个服务器,共同占用硬
盘.共用空间少.
上述Lucene框架中的缺点,ES全部都能办理
1.3
哪些公司在使用Elasticsearch
- 京东
- 携程
- 去哪儿
- 58同城
- 滴滴
- 今日头条
- 小米
- 哔哩哔哩
- 等等
1.4
ES
vs
关系型数据库
2.Lucene全文检索框架
2.1
什么是全文检索
全文检索是指:
-
通过一个程序扫描文本中的每一个单词,针对单词建立索引,并生存该单
词在文本中的位置、以及出现的次数
-
用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位
置、出现的次数返回给用户,因为有了详细文本的位置,所以就可以将详细内
容读取出来了
3.Elasticsearch中的核心概念
3.1
索引
index
一个索引就是一个拥有几分相似特征的文档的聚集。好比说,可以有一个客户数据
的索引,另一个产物目录的索引,另有一个订单数据的索引
一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这
个索引中的文档举行索引、搜索、更新和删除的时间,都要使用到这个名字
3.2
映射
mapping
ElasticSearch中的映射(Mapping)用来界说一个文档
mapping是处置惩罚数据的方式和规则方面做一些限定,如某个字段的数据范例、默认
值、分词器、是否被索引等等,这些都是映射里面可以设置的
3.3
字段Field
相当于是数据表的字段|列
3.4
字段范例
Type
每一个字段都应该有一个对应的范例,例如:Text、Keyword、Byte等
3.5
文档
document
一个文档是一个可被索引的底子信息单位,类似一条记录。文档以JSON(Javascript
Object
Notation)格式来表示;
3.6
集群
cluster
一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提
供索引和搜索功能
3.7
节点
node
一个节点是集群中的一个服务器,作为集群的一部门,它存储数据,到场集群的索
引和搜索功能
一个节点可以通过配置集群名称的方式来参加一个指定的集群。默认情况下,每
个节点都会被安排参加到一个叫做“elasticsearch”的集群中
这意味着,假如在网络中启动了多少个节点,并假定它们能够相互发现相互,它们
将会主动地形成并参加到一个叫做“elasticsearch”的集群中
在一个集群里,可以拥有任意多个节点。而且,假如当前网络中没有运行任何
Elasticsearch节点,这时启动一个节点,会默认创建并参加一个叫
做“elasticsearch”的集群。
3.8
分片和副本
shards&replicas
3.8.1
分片
- 一个索引可以存储超出单个结点硬件限定的大量数据。好比,一个具有10
亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或
者单个节点处置惩罚搜索请求,响应太慢
- 为相识决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些
份就叫做分片
- 当创建一个索引的时间,可以指定你想要的分片的数量
- 每个分片本身也是一个功能美满并且独立的“索引”,这个“索引”可以
被放置到集群中的任何节点上
- 分片很重要,主要有两方面的缘故原由
允许水中分割/扩展你的内容容量
允许在分片之上举行分布式的、并行的操作,进而进步性能/吞吐量
- 至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由
Elasticsearch管理的,对于作为用户来说,这些都是透明的
3.8.2
副本
- 在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎
么的就处于离线状态,大概由于任何缘故原由消失了,这种情况下,有一个故障转
移机制是非常有用并且是猛烈保举的。为此目的,Elasticsearch允许你创建分
片的一份或多份拷贝,这些拷贝叫做副天职片,大概直接叫副本
- 副本之所以重要,有两个主要缘故原由
- 在分片/节点失败的情况下,提供了高可用性。注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的
- 扩展搜索量/吞吐量,因为搜索可以在全部的副本上并行运行每个索引可以被分成多个分片。一个索引有0个或多个副本一旦设置了副本,每个索引就有了主分片和副天职片,分片和副本的数量可以在索引创建的时间指定,索引创建之后,可以在任何时间动态地改变副本的数量,但是不能改变分片的数量
4.安装Elasticsearch
4.1
安装Elasticsearch
4.1.1
创建普通用户
**ES不能使用root用户来启动,必须使用普通用户来安装启动。**这里我们创建一个普通用户以及界说一些常规目任命于存放我们的数据文件以及安装包等。创建一个es专门的用户(必须)
使用root用户在服务器实行以下下令
5.ES数据管理
8.1
ES数据管理概述
ES是面向文档(document
oriented)的,这意味着它可以存储整个对象或文档(document)。
然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。
在ES中,你可以对文档(而非成行成列的数据)举行索引、搜索、排序、过滤。
ES使用JSON作为文档序列化格式。
JSON如今已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
ES存储的一个员工文档的格式示例:-
- {
- "email":
- "584614151@qq.com",
- "name":
- "张三",
- "age":
- 30,
- "interests":
- [
- "篮球",
- "健身"
- ]
- }
-
复制代码 8.2
根本操作
格式:
PUT
/索引名称
举例:
PUT
/es_db
格式:
GET
/索引名称
举例:
GET
/es_db
格式:
DELETE
/索引名称
举例:
DELETE
/es_db
格式:
PUT
/索引名称/范例/id
举例:
PUT
/es_db/doc/1
{
"name":
"张三",
"sex":
1,
"age":
25,
"address":
"广州天河公园",
"remark":
"java
developer"
}
PUT
/es_db/doc/2
{
"name":
"李四",
"sex":
1,
"age":
28,
"address":
"广州荔湾大厦",
"remark":
"java
assistant"
}
PUT
/es_db/doc/3
{
"name":
"rod",
"sex":
0,
"age":
26,
"address":
"广州白云山公园",
"remark":
"php
developer"
}
PUT
/es_db/doc/4
{
"name":
"admin",
"sex":
0,
"age":
22,
"address":
"长沙橘子洲头",
"remark":
"python
assistant"
}
PUT
/es_db/_doc/5
{
"name":
"小明",
"sex":
0,
"age":
19,
"address":
"长沙岳麓山",
"remark":
"java
architect
assistant"
}
格式:
PUT
/索引名称/范例/id
举例:
PUT
/es_db/_doc/1
{
"name":
"白起老师",
"sex":
1,
"age":
25,
"address":
"张家界
森林公园",
"remark":
"php
developer
assistant"
}
注意 OST和PUT都能起到创建/更新的作用
1、需要注意的是==PUT==需要对一个详细的资源举行操作也就是要确定id才气举行==更新/创建,而==POST==是可以针对整个资源聚集举行操作的,假如不写id就由ES生成一个唯一id举行==创建==新文档,假如填了id那就针对这个id的文档举行创建/更新
2、PUT只会将json数据都举行替换,
POST只会更新雷同字段的值
3、PUT与DELETE都是幂等性操作,
即不论操作多少次,
结果都一样
格式:
GET
/索引名称/范例/id
举例:
GET
/es_db/_doc/1
格式:
DELETE
/索引名称/范例/id
举例:
DELETE
/es_db/_doc/1
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|