前言
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。
详解
之前出过一篇攻略,关于安装,我们就不再重复了,可以查看这篇攻略以及索引。Docker安装ES
之前可能说的不是很详细,所以,我们还是需要再把这个原理和应用再细细划分一下。
我们在接触这个ES之前,一定是接触过数据库的,我们以管理型数据库mysql为例,对照一下,mysql和es之间的区别。
关系型数据库(Eg. MySQL) | 非关系型数据库(Eg. ElasticSearch) |
---|---|
数据库Database | 索引Index |
表Table | 类型Type |
数据行Row | 文档Dpcument |
数据列Column | 字段Field |
Node(节点)与Cluster(集群)
Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。
Index(索引)
Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。
所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。
下面的命令可以查看当前节点的所有 Index。
$ curl -X GET 'http://localhost:9200/_cat/indices?v'
Document(文档)
Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。
Document 使用 JSON 格式表示,例如这样:
{
"user": "天听",
"title": "攻城狮",
"desc": "CV大法传承人"
}
同一个 Index 里面的 Document,不要求有相同的结构,但是最好保持相同,这样有利于提高搜索效率。
Type(类型)
Document 可以分组,比如有一个weather的Index,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。
不同的 Type 应该有相似的结构(schema),举例来说,id字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。性质完全不同的数据(比如products和logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。
类比一下MySQL,索引就好比是数据库,type就是数据表,文档,就是表中的数据。
下面的命令可以列出每个 Index 所包含的 Type。
$ curl 'localhost:9200/_mapping?pretty=true'
完结
至于为什么要出这篇文章呢….emmmm….是时间太久,太久没用过这个东西,我自己也已忘的一干二净了,所以借此机会,再写一些关于ES的搜索知识用来巩固,自己的技术还得是总结下来才是自己的,否则时间一久,就跟没有似的。
- Post link: https://www.godhearing.cn/elasticsearch-xiang-jie/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.