ElasticSearch 学习笔记

Elasticsearch是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎( Lucene 可以说是当今最先进,最高效的全功能开源搜索引擎框架)。

Elasticsearch是一个实时分布式和开源的全文搜索和分析引擎, 它可以从RESTful Web服务接口访问,并使用 JSON(JavaScript Object Notation,JavaScript对象标志法)文档来存储数据。它基于Java编程语言,这使Elasticsearch能够在不同的平台上运行,使用户能够以非常快的速度来搜索非常大的数据量。

1 Elasticsearch的特性及相关概念
1.1 Elasticsearch的特性
  • Elasticsearch可扩展高达PB级的结构化和非结构化数据

  • Elasticsearch可以用来替代MongoDB和RavenDB等做文档存储

  • Elasticsearch使用非标准化来提高搜索性能

  • Elasticsearch源代码开放

1.2 相关概念
  • 节点 - 它指的是ElasticSearch的单个正在运行的实例。单个物理和虚拟服务器容纳多个节点,这取决于其物理资源的能力,如RAM,存储和处理能力。

  • 集群 - 它是一个或多个节点的集合。 集群为整个数据提供跨所有节点的集合索引和搜索功能。

  • 索引 - 它是不同类型的文档和文档属性的集合。索引还使用分片的概念来提高性能。 例如,一组文档包含社交网络应用的数据。

  • 类型/映射 - 它是共享同一索引中存在的一组公共字段的文档的集合。 例如,索引包含社交网络应用的数据,然后它可以存在用于用户简单数据的特定类型,另一类型可用于消息的数据,以及另一类型可用于评论的数据。

  • 文档 - 它是以JSON格式定义的特定方式的字段集合。每个文档都属于一个类型并驻留在索引中。每个文档都与唯一标识符(称为UID)相关联。

  • 分片 - 索引被水平细分为分片。这意味着每个分片包含文档的所有属性,但包含的数量比索引少。水平分隔使分片成为一个独立的节点,可以存储在任何节点中。主分片是索引的原始水平部分,然后这些主分片被复制到副本分片中。

  • 副本 - Elasticsearch允许用户创建其索引和分片的副本。 副本不仅有助于在故障情况下增加数据的可用性,而且还可以通过在这些副本中执行并行搜索操作来提高搜索的性能。

1.3 优点和不足

1、优点

  • Elasticsearch是基于Java开发的,因此平台兼容性很强。

  • Elasticsearch是准实时的,换句话说,一秒钟后(默认),添加的文档可以在这个引擎中搜索得到

  • Elasticsearch是分布式的,这使得它易于在任何大型组织中扩展和集成

  • 通过使用Elasticsearch中的网关概念,创建完整备份很容易

  • 与Apache Solr相比,在Elasticsearch中处理多租户非常容易

  • Elasticsearch使用JSON对象作为响应,这使得可以使用不同的编程语言调用Elasticsearch服务器

  • Elasticsearch支持几乎大部分文档类型,但不支持文本呈现的文档类型

2、不足

  • Elasticsearch在处理请求和响应数据方面没有多语言和数据格式支持(仅在JSON中可用),与Apache Solr不同,Elasticsearch不可以使用CSV,XML等格式

  • Elasticsearch也有一些棘手的问题发生,虽然在极少数情况下才会发生。

2 安装及环境配置

本机安装的是elasticsearch-5.2.0 版本(Windows),并安装了 Sense 插件

下载链接: elasticsearch-5.2.0

启动 elasticsearch.bat 报“encountered environment variables that are no longer supported” 错误:
这里写图片描述

环境变量都设置没问题,实在没找到有效的解决方法,直接将启动文件里面的 bad_env_var 变量校验去掉,可以解决该问题:
这里写图片描述

启动后,在浏览器访问 http://localhost:9200/ 或使用 Sense 访问,返回如下结果:

{
 "name" : "uKpwu-H",
 "cluster_name" : "elasticsearch",
 "cluster_uuid" : "fiMmhaEPQsWdlg-S8Dfxyg",
 "version" : {
   "number" : "5.2.0",
   "build_hash" : "24e05b9",
   "build_date" : "2017-01-24T19:52:35.800Z",
   "build_snapshot" : false,
   "lucene_version" : "6.4.0"
 },
 "tagline" : "You Know, for Search"
}
3 简单使用-文档管理(CRUD)
3.1 创建索引

索引对应于 CRUD 中的 C 和 U,如果具有相同类型和ID的文档已存在,则会进行覆盖。

创建索引的URL格式为:

http://localhost:9200/<index>/<type>/[<id>]

其中,index 和 type 是必须的,id 可选,如果没有指定 id,ElasticSearch 会默认生成一个 id。但是,如果不指定 id,应该使用 http 的 POST 而不是 PUT 请求。

现以一个电影对象信息来创建索引:

{
    "title": "The Godfather",
    "director": "Francis Ford Coppola",
    "year": 1972
}

以 movies 为索引名,类型为 movie, id 为 1,curl 的请求方式如下:

curl -XPUT "http://localhost:9200/movies/movie/1" -d'
{
    "title": "The Godfather",
    "director": "Francis Ford Coppola",
    "year": 1972
}'

可以使用 curl(参考window下使用curl操作elasticsearch),也可以使用Sense 来执行:
这里写图片描述

响应对象包含创建索引的相关信息,如index、type、文档 id, 版本,分片等信息

查询索引

curl localhost:9200/_cat/indices?v
或 Sense 请求
GET /_cat/indices?v

3.2 更新索引

更新索引只需使用相同的 id 索引。使用与创建索引完全相同的请求,但修改了 JSON 对象:

curl -XPUT "http://localhost:9200/movies/movie/1" -d'
{
    "title": "The Godfather",
    "director": "Francis Ford Coppola",
    "year": 1972,
    "genres": ["Crime", "Drama"]
}'

这里写图片描述

此时 _version 变为 2,result 为 “updated”, _id 还是为 1。

注: _version 可用于跟踪文档已编入索引的次数。其主要目的是允许乐观的并发控制,因为可以在索引请求中提供一个版本,如果提供的版本高于索引中的版本,ElasticSearch将只覆盖文档内容,ID值不变,版本号自动添加。

3.3 由ID获取文档/索引

通过ID从ElasticSearch中检索文档可发出GET请求:
http://localhost:9200/<index>/<type>/<id>

如:

curl -XGET "http://localhost:9200/movies/movie/1" -d''

sense 下为: GET /movies /movie/1
这里写图片描述

3.4 删除文档

删除的请求格式如下:
curl -XDELETE "http://localhost:9200/<index>/<type>/[<id>]" -d''

删除示例:

curl -XDELETE “http://localhost:9200/movies/movie/1” -d”
这里写图片描述

响应信息中包含一个 “_found” 属性,表示指定的文档已找到并且操作成功。



参考:
Elasticsearch入门教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值