Elasticsearch 基础入门
原文地址:Elasticsearch 基础入门
博客地址:http://www.extlight.com

一、什么是 ElasticSearch
ElasticSearch是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
1.1 基础概念
索引:含有相同属性的文档集合
类型:索引可以定义一个或多个类型,文档必须属于一个类型
文档:可以被索引的基础数据单位
分片:每个索引都有多个分片,每个分片都是 Lucene 索引
备份:拷贝一份分片就完成分片的备份
形象比喻:
百货大楼里有各式各样的商品,例如书籍、笔、水果等。书籍可以根据内容划分成不同种类,如科技类、教育类、悬疑推理等。悬疑推理类的小说中比较有名气的有《福尔摩斯探案集》、《白夜行》等。
百货大楼 --> ElasticSearch 数据库
书籍 --> 索引
悬疑推理 --> 类型
白夜行 --> 文档
1.2 应用场景
- 海量数据分析引擎
- 站内搜索引擎
- 数据仓库
二、安装和配置
本次测试使用一台 ip 为 192.168.2.41 的虚拟机(Centos7),建议使用 7.x 版本,笔者之前使用 6.x 启动服务时报出各种错误
2.1 依赖环境
JDK 和 NodeJS
2.2 下载
登陆 elasticSearch 官网下载文件。
2.3 安装
tar -zxvf elasticsearch-5.6.1.tar.gz -C /usr
cd elasticsearch-5.6.1
elasticsearch 文件目录如下图:

2.4 启动
踩坑提醒 1:
因为 Elasticsearch 可以执行脚本文件,为了安全性,默认不允许通过 root 用户启动服务。我们需要新创建用户名和用户组启动服务
#增加 es 组
groupadd es
#增加 es 用户并附加到 es 组
useradd es -g es -p es
#给目录权限
chown -R es:es elasticsearch-5.6.1
#使用es用户
su es
踩坑提醒 2:
默认情况下,Elasticsearch 只允许本机访问,如果需要远程访问,需要修改其配置文件
vim config/elasticsearch.yml
# 去掉 network.host 前边的注释,将它的值改成0.0.0.0
network.host: 0.0.0.0
踩坑提醒 3:
在启动过程中,Centos 环境下可能还会报错,具体解决方案请参照文章末尾提供的资料
启动服务
bin/elasticsearch
通过浏览器访问 http://192.168.2.41:9200 ,当出现如下内容说明启动成功:
{
"name" : "OwUwJe-",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "vanzxnpaRumdRKiYic3f5A",
"version" : {
"number" : "5.6.1",
"build_hash" : "667b497",
"build_date" : "2017-09-14T19:22:05.189Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
}
2.5 安装插件
访问 http://192.168.2.41:9200 查看内容显示效果不友好,因此,我们需要安装一个名为 elasticsearch-head 的插件,让内容显示效果比较舒适。
登陆 GitHub 网站,搜索 mobz/elasticsearch-head ,将其下载到本地。
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip
cd elasticsearch-head-master
npm install
npm run start
通过上述命令的操作,我们已经安装好 elasticsearch-head 插件。通过浏览器访问 http://192.168.2.41:9100,如下图:

图中我们发现 elasticsearch-head 插件和 Elasticsearch 服务并没有建立连接,所以我们还需要修改 Elasticsearch 的配置文件:
cd elasticsearch-5.6.1
vim config/elasticsearch.yml
# 在文件末尾添加 2 段配置
http.cors.enabled: true
http.cors.allow-origin: "*"
保存文件后,分别起来 2 个程序:
cd elasticsearch-5.6.1
# 后台启动 elasticSearch 服务
bin/elasticsearch -d
cd elasticsearch-head-master
npm run start
通过浏览器访问 http://192.168.2.41:9100,如下图:

通过插件创建索引

查看索引基本情况

该插件能直接对 Elasticsearch 的数据进行增删改查,因此存在安全性的问题。建议生产环境下不要使用该插件!
三、使用
Elasticsearch 支持 RESTFUL 风格 API,其 API 基本格式如下:
http://<ip>:<port>/<索引>/<类型>/<文档id>
3.1 创建/删除索引
为了方便测试,我们使用 POSTMAN 工具进行接口的请求。
创建一个非结构化的索引,需要使用 PUT 请求。例如创建一个名为 book 的索引。
执行:
[PUT] http://192.168.2.41:9200/book
返回结果:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "book"
}
创建一个结构化的索引,如下图:

删除一个索引,需要使用 DELETE 请求。
执行:
[DELETE] http://192.168.2.41:9200/book
返回结果:
{
"acknowledged": true
}
3.2 插入数据
插入指定 ID 的数据,需要使用 PUT 请求。如下图:

插入不指定 ID 的数据,需要使用 POST 请求。如下图:

3.3 修改数据
修改数据,需要使用 POST 请求,且 URL 需要添加 _update
执行:
[POST] http://192.168.2.41:9200/fruit/apple/1/_update
请求参数(修改颜色):
{
"doc": {
"color": "black"
}
}
返回结果:
{
"_index": "fruit",
"_type": "apple",
"_id": "1",
"_version": 7,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
}
}
3.4 删除数据
修改数据,需要使用 DELETE 请求。
执行:
[DELETE] http://192.168.2.41:9200/fruit/apple/1
返回结果:
{
"found": true,
"_index": "fruit",
"_type": "apple",
"_id": "1",
"_version": 8,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
}
}
3.5 查找数据
查询指定ID的数据,需要使用 GET 请求。
执行:
[GET] http://192.168.2.41:9200/fruit/apple/AV69_4DDdZbC-YBdV-U3
返回结果:
{
"_index": "fruit",
"_type": "apple",
"_id": "AV69_4DDdZbC-YBdV-U3",
"_version": 1,
"found": true,
"_source": {
"color": "green",
"weight": 1,
"createTime": "2017-09-26 19:05:26"
}
}
条件查询,需要使用 POST 请求。
执行:
[POST] http://192.168.2.41:9200/fruit/apple/_search
请求参数(查找 color = "green"):
{
"query": {
"match":{
"color": "green"
}
}
}
返回结果:
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.2876821,
"hits": [
{
"_index": "fruit",
"_type": "apple",
"_id": "AV69_4DDdZbC-YBdV-U3",
"_score": 0.2876821,
"_source": {
"color": "green",
"weight": 1,
"createTime": "2017-09-26 19:05:26"
}
}
]
}
}
参考资料
- http://blog.csdn.net/qq942477618/article/details/53414983 解决问题方案
- http://blog.csdn.net/laotoumo/article/details/53890279 解决问题方案
- http://blog.csdn.net/jiankunking/article/details/65448030 解决问题方案
- http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
- http://www.cnblogs.com/ghj1976/p/5293250.html
Elasticsearch 基础入门的更多相关文章
- ElasticSearch基础入门学习笔记
前言 本笔记的内容主要是在从0开始学习ElasticSearch中,按照官方文档以及自己的一些测试的过程. 安装 由于是初学者,按照官方文档安装即可.前面ELK入门使用主要就是讲述了安装过程,这里不再 ...
- ElasticSearch基础入门
1.query查询表达式 Elasticsearch 提供一个丰富灵活的查询语言叫做 查询表达式 , 查询表达式(Query DSL)是一种非常灵活又富有表现力的 查询语言,它支持构建更加复杂和健壮的 ...
- Elasticsearch基础入门,详情可见官方文档
索引文档: 对于员工目录,我们将做如下操作: 每个员工索引一个文档,文档包含该员工的所有信息. 每个文档都将是 employee 类型 . 该类型位于 索引 megacorp 内. 该索引保存在我们的 ...
- ElasticSearch 基础入门 and 操作索引 and 操作文档
基本概念 索引: 类似于MySQL的表.索引的结构为全文搜索作准备,不存储原始的数据. 索引可以做分布式.每一个索引有一个或者多个分片 shard.每一个分片可以有多个副本 replica. 文档: ...
- ELKStack的基础入门和中文指南
一.ELKStack的中文指南 redhat系列配置repo源 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch vi / ...
- Logstash 基础入门
原文地址:Logstash 基础入门博客地址:http://www.extlight.com 一.前言 Logstash 是一个开源的数据收集引擎,它具有备实时数据传输能力.它可以统一过滤来自不同源的 ...
- Kibana 基础入门
原文地址:Kibana 基础入门 博客地址:http://www.extlight.com 一.前言 Kibana 是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作.Kibana ...
- Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】
前几天写过一篇<Elasticsearch 7.x 最详细安装及配置>,今天继续最新版基础入门内容.这一篇简单总结了 Elasticsearch 7.x 之文档.索引和 REST API. ...
- [转]小D课堂 - 零基础入门SpringBoot2.X到实战_汇总
原文地址:https://www.cnblogs.com/wangjunwei/p/11392825.html 第1节零基础快速入门SpringBoot2.0 小D课堂 - 零基础入门SpringBo ...
随机推荐
- C++实现String容器的基本功能
本文只实现String类的构造函数.析构函数.赋值构造函数和赋值函数,其他操作不再详述,一般的笔试面试基本上也只会要求实现这四个函数的功能. #include <iostream> usi ...
- 快速切题 sgu120. Archipelago 计算几何
120. Archipelago time limit per test: 0.25 sec. memory limit per test: 4096 KB Archipelago Ber-Islan ...
- (zz)设置单元格的宽度和高度
(zz)设置单元格的宽度和高度 博客分类: POI生成Excel 在Excel中,单元格的宽度其实就是列的宽度,因为Excel假设这一列的单元格的宽度肯定一致.所以要设置单元格的宽度,我们就得从列 ...
- java代码获取客户端的真实ip
java代码获取客户端的真实ip protected String getIpAddr(HttpServletRequest request) { String ip = request.getHea ...
- selenium(五)伪造浏览器
简介: 这个就比较好玩了,大家还记得以前的QQ小尾巴么?还有百度贴吧的小尾巴,就是那个来自***的iphone7,这个功能. 这个功能是基于浏览器的user-agent功能实现的. 还是httpbin ...
- anu - controlledComponent
/** input, select, textarea这几个元素如果指定了value/checked的**状态属性**,就会包装成受控组件或非受控组件 受控组件是指,用户除了为它指定**状态属性**, ...
- CODE大全大量Flash网站收藏
我的博客:CODE大全:www.codedq.net:业余草:www.xttblog.com:爱分享:www.ndislwf.com或ifxvn.com. http://www.wallop.com在 ...
- OC基础:类的扩展.协议 分类: ios学习 OC 2015-06-22 19:22 34人阅读 评论(0) 收藏
//再设计一个类的时候,有些方法需要对外公开(接口),有些仅供内部使用. 类的扩展:为类添加新的特征(属性)或者方法 对已知类: 1.直接添加 2.继承(在其子类中添加实例变量和方法) 3.使用ext ...
- 【opencv基础】图像翻转cv::flip详解
前言 在opencv中cv::flip函数用于图像翻转和镜像变换. 具体调用形式 void cv::flip( cv::InputArray src, // 输入图像 cv::OutputArray ...
- win10笔记本实现双屏显示的自如切换
前言 使用电脑的过程中想一边看内容,一边进行编辑,这就涉及到双屏显示并实现扩展分屏,本文就介绍一下这些操作. 工具 win10-thinkpad-E470:另一块显示屏(博主的是戴尔的显示器):一条外 ...