ArcherWong博客
首页
博客
elasticsearch基础概念
作者:ArcherWong
分类:elasticsearch
时间:2019-01-03 21:33:26
阅读:367
[TOC] # 1. 基本语法 如果你正在使用 Java,在代码中你可以使用 Elasticsearch 内置的两个客户端。所有其他语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信,你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上,正如你所看到的,你甚至可以使用 curl 命令来和 Elasticsearch 交互。 **注意** Elasticsearch 为以下语言提供了官方客户端 --Groovy、JavaScript、.NET、 PHP、 Perl、 Python 和 Ruby--还有很多社区提供的客户端和插件,所有这些都可以在 [Elasticsearch Clients](https://www.elastic.co/guide/en/elasticsearch/client/index.html) 中找到。 一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成: curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>' 被 < > 标记的部件含义: 字段 | 含义 ---|--- VERB | 适当的 HTTP 方法 或 谓词 : GET`、 `POST`、 `PUT`、 `HEAD 或者 `DELETE`。 PROTOCOL | http 或者 https`(如果你在 Elasticsearch 前面有一个 `https 代理) HOST | Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。 PORT | 运行 Elasticsearch HTTP 服务的端口号,默认是 9200 。 PATH | API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例如:_cluster/stats 和 _nodes/stats/jvm 。 QUERY_STRING | 任意可选的查询字符串参数 (例如 **?pretty将格式化地输出 JSON 返回值**,使其更容易阅读) BODY | 一个 JSON 格式的请求体 (如果请求需要的话) 例如,计算集群中文档的数量,我们可以用这个(**完整模式**): ``` curl -XGET 'http://localhost:9200/_count?pretty' -d ' { "query": { "match_all": {} } }' ``` 想要在返回结果中看到 HTTP 头信息,需要结合 `-i 参数来使用 curl 命令: curl -i -XGET 'localhost:9200/' 很多资料会使用**缩写格式**显示: 所谓的缩写格式就是省略请求中所有相同的部分,例如主机名、端口号以及 curl 命令本身。而不是像上面例子中显示的那样用一个完整的请求 ``` GET /_count { "query": { "match_all": {} } } ``` # 2. 数据架构:(官方实例:索引雇员文档) ## 2.1 文档的样子 一个 Elasticsearch 集群可以包含多个索引(类似于数据库),相应的每个索引可以包含多个类型。这些不同的类型存储着多个文档 ,每个文档又有多个属性 。 借助以下一条查询出的结果理解: ``` { "_index": "megacorp", "_type": "employee", "_id": "1", "_version": 1, "found": true, "_source": { "first_name": "John", "last_name": "Smith", "age": 25, "about": "I love to go rock climbing", "interests": [ "sports", "music" ] } } ``` 每个雇员索引一个**文档**,包含该雇员的所有信息。 每个文档都将是 employee **类型** 。 该类型位于 **索引** megacorp 内。 该索引保存在我们的 Elasticsearch **集群**中。 在 Elasticsearch 中,术语 **文档** 有着特定的含义。它是指最顶层或者根对象, 这个根对象被序列化成 JSON 并存储到 Elasticsearch 中,指定了唯一 ID。 ## 2.2 元数据 一个文档除了自身数据外,还包括元数据(有关文档的信息) 三个必须的元数据元素如下: - _index 文档在哪存放 - _type 文档表示的对象类别 - _id 文档唯一标识 1> 索引 索引名必须小写,不能以下划线开头,不能包含逗号 **实际上,在 Elasticsearch 中,我们的数据是被存储和索引在『分片』中,而一个索引仅仅是逻辑上的命名空间, 这个命名空间由一个或者多个分片组合在一起。** 然而,这是一个内部细节,我们的应用程序根本不应该关心分片,对于应用程序而言,只需知道文档位于一个 索引 内。 Elasticsearch 会处理所有的细节,当然这很有意思,有兴趣可以读下相关章节- 『集群原理』(https://www.elastic.co/guide/cn/elasticsearch/guide/current/distributed-cluster.html)。 2> 类别 数据可能在索引中只是松散的组合在一起,但是通常明确定义一些数据中的子分区是很有用的,在索引中对数据进行逻辑分区,这将更加清晰。 一个 _type 命名可以是大写或者小写,但是不能以下划线或者句号开头,不应该包含逗号, 并且长度限制为256个字符. 3> id ID 是一个字符串, 当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch 中的一个文档。 当你创建一个新的文档,要么提供自己的 _id ,要么让 Elasticsearch 帮你生成。 4> 其他一些元数据 ## 2.3 与mysql的对比 (1)关系型数据库中的数据库(DataBase),等价于ES中的索引(Index) (2)一个数据库下面有N张表(Table),等价于1个索引Index下面有N多类型(Type) (3)一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成,等价于1个Type由多个文档(Document)和多Field组成。 (4)在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。 与之对应的,在ES中:Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。 (5)在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET. ## 2.4 核心概念 可能作为开发工程师以下的一些概念可能并不需要关心,但是了解下也是可以的。 ES核心概念 1)Cluster:集群。 ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。 2)Node:节点。 形成集群的每个服务器称为节点。 3)Shard:分片。 当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。 当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。 4)Replia:副本。 为提高查询吞吐量或实现高可用性,可以使用分片副本。 副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。 当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。 5)全文检索。 全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。 全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token,这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。 ## 2.5 什么是ELK ELK不是一款软件,而是elasticsearch+Logstash+kibana三款开源软件组合而成的日志收集处理套件,堪称神器。其中Logstash负责日志收集,elasticsearch负责日志的搜索、统计,而kibana则是ES的展示神器,前端炫丽,点几下鼠标简单配置,就可以完成搜索、聚合功能,生成华丽的报表。 # 参考 https://cloud.tencent.com/developer/article/1066239
标签:
上一篇:
elasticsearch安装教程
下一篇:
elasticsearch增删改查操作
文章分类
css
elasticsearch
git
golang
guacamole
javascript
letsencrypt
linux
nginx
other
php
python
vue
web
阅读排行
golang笔记---关联数组(map)
letsencrypt证书-管理工具certbot
centos7.3配置guacamole
golang笔记---template模板语法
nginx笔记-proxy_cache缓存详解
友情链接
node文件
laravel-vue
ArcherWong的博客园