elasticsearch
简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
ElasticSearch核心概念
接近实时(NRT)
Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)。
集群(cluster)
一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。在产品环境中显式地设定这个名字是一个好习惯,但是使用默认值来进行测试/开发也是不错的。
节点(node)
一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。
一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。
在一个集群里,只要你想,可以拥有任意多个节点。而且,如果当前你的网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。
索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。
在一个集群中,如果你想,可以定义任意多的索引。
类型(type)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
文档(document)
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。
在一个index/type里面,只要你想,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。
分片和复制(shards & replicas)
一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。
为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。
分片之所以重要,主要有两方面的原因:
- 允许你水平分割/扩展你的内容容量
- 允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量
至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。
在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。
复制之所以重要,有两个主要原因:
- 在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
- 扩展你的搜索量/吞吐量,因为搜索可以在所有的复制上并行运行
总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。
默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。
安装启动
安装前准备
(1)安装JDK
1、官网下载java8
2、设置环境变量 ,路径:计算机→属性→高级系统设置→高级→环境变量
classpath .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
path 后面增加; %JAVA_HOME%\bin;
JAVA_HOME C:\Program Files\Java\jdk1.8.0_172
(2)测试准备
1、安装soupui
SOUPUI下载
https://www.soapui.org/downloads/thank-you-for-downloading-soapui.html
(3)安装es
下载 https://www.elastic.co/downloads/elasticsearch
安装解压安装包
启动 ElasticSearch
启动测试,浏览器上输入,有以下内容则表示启动成功 http://localhost:9200/
|
(4)使用soupui测试
1、建立新的rest工程
2、建立新的rest 请求
method选择put
media type 选择 application/json
Elasticsearch入门教程
创建索引
在ElasticSearch索引中,对应于CRUD中的“创建”和“更新” - 如果对具有给定类型的文档进行索引,并且要插入原先不存在的ID。 如果具有相同类型和ID的文档已存在,则会被覆盖。
要索引第一个JSON对象,我们对REST API创建一个PUT请求到一个由索引名称,类型名称和ID组成的URL。 也就是:http://localhost:9200/<index>/<type>/[<id>]。
索引和类型是必需的,而id部分是可选的。如果不指定ID,ElasticSearch会为我们生成一个ID。 但是,如果不指定id,应该使用HTTP的POST而不是PUT请求。
索引名称是任意的。如果服务器上没有此名称的索引,则将使用默认配置来创建一个索引。
至于类型名称,它也是任意的。 它有几个用途,包括:
每种类型都有自己的ID空间。
不同类型具有不同的映射(“模式”,定义属性/字段应如何编制索引)。
搜索多种类型是可以的,并且也很常见,但很容易搜索一种或多种指定类型。
现在我们来索引一些内容! 可以把任何东西放到索引中,只要它可以表示为单个JSON对象。
新增索引
method
选择put
url 输入PUT "http://localhost:9200/movies/movie/1
media type
选择 application/json
消息体输入json体
|
PUT http://localhost:9200/movies/movie/1
返回的结构体如下:
{ "_index": "movies", "_type": "movie", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 } |
更新索引
现在,在索引中有了一部电影信息,接下来来了解如何更新它,添加一个类型列表。要做到这一点,只需使用相同的ID索引它。使用与之前完全相同的索引请求。
{
}
|
返回的结构体如下:
{
}
|
由ID获取文档/索引
method
选择get
GET "http://localhost:9200/movies/movie/1
删除文档
同样method选择delete
DELETE "http://localhost:9200/movies/movie/1"
搜索
预置以下几条数据
PUT "http://localhost:9200/movies/movie/1" { "title": "The Godfather", "director": "Francis Ford Coppola", "year": 1972, "genres": ["Crime", "Drama"] }
PUT "http://localhost:9200/movies/movie/2" { "title": "Lawrence of Arabia", "director": "David Lean", "year": 1962, "genres": ["Adventure", "Biography", "Drama"] }
PUT "http://localhost:9200/movies/movie/3" { "title": "To Kill a Mockingbird", "director": "Robert Mulligan", "year": 1962, "genres": ["Crime", "Drama", "Mystery"] }
PUT "http://localhost:9200/movies/movie/4" { "title": "Apocalypse Now", "director": "Francis Ford Coppola", "year": 1979, "genres": ["Drama", "War"] }
PUT "http://localhost:9200/movies/movie/5" { "title": "Kill Bill: Vol. 1", "director": "Quentin Tarantino", "year": 2003, "genres": ["Action", "Crime", "Thriller"] }
PUT "http://localhost:9200/movies/movie/6" { "title": "The Assassination of Jesse James by the Coward Robert Ford", "director": "Andrew Dominik", "year": 2007, "genres": ["Biography", "Crime", "Drama"] } |
ElasticSearch具有和端点(_bulk
)用于用单个请求索引多个文档
按照以下模式向URL发出请求:<index>/<type>/_search。其中,index和type都是可选的。
换句话说,为了搜索电影,可以对以下任一URL进行POST请求:
- http://localhost:9200/_search - 搜索所有索引和所有类型。
- http://localhost:9200/movies/_search - 在电影索引中搜索所有类型
- http://localhost:9200/movies/movie/_search - 在电影索引中显式搜索电影类型的文档。
基本自由文本搜索
查询DSL具有一长列不同类型的查询可以使用。 对于“普通”自由文本搜索,最有可能想使用一个名称为“查询字符串查询”。
查询字符串查询是一个高级查询,有很多不同的选项,ElasticSearch将解析和转换为更简单的查询树。如果忽略了所有的可选参数,并且只需要给它一个字符串用于搜索,它可以很容易使用。
POST
"http://localhost:9200/_search
{
"query":
{
"query_string":
{
"query":
"kill"
}
}
}
指定搜索的字段
如果不使用“fields”字段,ElasticSearch查询将默认自动生成的名为“_all
”的特殊字段,来基于所有文档中的各个字段匹配搜索。
POST
"http://localhost:9200/_search"
{
"query":
{
"query_string":
{
"query":
"ford",
"fields":
["title"]
}
}
}
ElasticSearch查询DSL有各种各样的过滤器可供选择。对于这个简单的情况,某个字段应该匹配一个特定的值,一个条件过滤器就能很好地完成工作。
POST
"http://localhost:9200/_search"
{
}
|
相关推荐
**ES安装教程:单点部署ES、部署Kibana及IK分词器** 在本文中,我们将深入探讨如何进行Elasticsearch(ES)的单点部署,安装Kibana,并配置IK分词器,这些都是大数据分析和日志管理中至关重要的组件。 ## 一、...
1. **安装与配置**:了解如何在不同的操作系统上安装 Elasticsearch,包括配置文件的修改,以及集群设置和节点配置。 2. **索引与文档**:学习 Elasticsearch 中的索引概念,理解如何创建、删除和操作索引,以及...
#### 一、Elasticsearch版本选择及安装 **1.1 版本选择** - **注意事项**: 在选择Elasticsearch版本时,需特别注意其与项目版本的兼容性问题。不同版本的Elasticsearch可能存在API差异,甚至有不兼容的情况发生。 -...
- **测试连接**:提到了如何测试与Elasticsearch集群的连接,确保一切正常。 - **游标**:解释了游标的使用,特别是在大数据量场景下进行高效数据检索的方式。 - **安装插件**:介绍了如何安装和管理Elasticsearch...
基于Docker安装Elasticsearch详细教程 Elasticsearch是分布式、高扩展、高实时的搜索与数据分析引擎,它能够很方便地使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产...
**Elasticsearch安装与教程** Elasticsearch(ES)是一种基于Lucene的开源搜索引擎,以其分布式、全文检索、实时分析的特性在IT行业中被广泛应用。它不仅提供了强大的搜索功能,还支持数据分析和可视化,是ELK...
**Elasticsearch 5.x 安装教程** Elasticsearch(简称ES)是一款基于Lucene的开源全文搜索引擎,提供分布式、RESTful风格的搜索和数据分析功能。在5.x版本中,它增强了性能,优化了API,并引入了许多新特性。本文将...
**Elasticsearch 安装教程总结** Elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎,广泛用于日志分析、实时监控、数据搜索等多个领域。本文将对Elasticsearch的安装过程进行总结,包括下载、安装插件、...
### Elasticsearch入门教程知识点详解 #### 一、Elasticsearch安装与基本操作 1. **解压目录结构**: - 在解压后的Elasticsearch目录中,通常包含多个子目录和文件,例如`bin`目录包含了启动脚本,`config`目录...
### Elasticsearch搭建教程 #### 一、Elasticsearch简介与适用场景 Elasticsearch是一个基于Lucene的搜索引擎。它提供了一个分布式、多租户能力的全文搜索引擎,使用倒排索引技术来存储和检索数据。Elasticsearch...
2. **安装配置**:详细讲解如何在不同操作系统(如Windows、Linux)上安装ElasticSearch,并进行基本配置。 3. **核心功能详解**: - 索引管理:如何创建、删除索引,以及对索引进行维护。 - 文档操作:包括文档的...
在实际的IT项目中,Elasticsearch-Head经常被用于开发和测试环境,帮助开发者直观地查看和调试ES集群。 **Elasticsearch简介** Elasticsearch 是一个基于Lucene的分布式、RESTful搜索和分析引擎,广泛应用于日志...
标题"ES测试代码,包括连接和数据插入及查询的测试工程,可直接运行"表明这是一个关于Elasticsearch(ES)的测试代码集合,主要涉及ES客户端的连接、数据插入以及查询操作。这通常是一个示例项目或者教程,方便...
- **安装插件**:概述了如何安装和管理Elasticsearch 插件以扩展其功能。 #### 性能优化 - **垃圾回收使用G1**:讨论了如何配置JVM的垃圾回收器以提高Elasticsearch 的性能。 - **分片分布在不同机器**:强调了合理...
总的来说,这个压缩包提供了一套完整的Elasticsearch在SpringBoot项目中的实践教程,包括基础的集成配置、CRUD操作实现、批量操作的代码示例,以及测试数据和详细文档,对于想学习或已经在使用SpringBoot和Elastic...
### ElasticSearch中文学习教程知识点梳理 #### 一、总述 **1.1. 简介** ElasticSearch是一款基于Lucene构建的开源、分布式、RESTful搜索引擎。它专为云计算环境设计,具备实时搜索能力,且稳定、可靠、快速、...
在现代大数据处理和搜索领域,Elasticsearch(ES)因其高效、可扩展的特性,已经成为广泛使用的搜索引擎和数据分析工具。而SpringBoot作为Java开发者的首选微服务框架,它简洁的配置方式和强大的自动化配置能力,...