了解一下Elasticsearch的基本概念
了解一下Elasticsearch的基本概念
一、前文介绍
Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。注意,Lucene 只是一个库。想要发挥其强大的作用,你需使用 Java 并要将其集成到你的应用中。
Lucene 非常复杂,你需要深入的了解检索相关知识来理解它是如何工作的,就跟学习 springmvc 之前先从 servlet 开始,繁琐复杂的工作,Solor、Elasticsearch 应由而生, 其使用 Java 编写并使用 Lucene 来建立索引并实现搜索功能,但是它的目的是通过简单连贯的 RESTful API 让全文搜索变得简单并隐藏 Lucene 的复杂性。
重要特性:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 实时分析的分布式搜索引擎
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
基本概念:
索引(indices)-------------------Databases 数据库
类型(type)----------------------Table 数据表
文档(Document)---------------Row 行
字段(Field)---------------------Columns 列
详细说明:
概念 | 说明 |
---|---|
索引库(indices) | indices是index的复数,代表许多的索引, |
类型(type) | 类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念 |
文档(document) | 存入索引库原始的数据。比如每一条商品信息,就是一个文档 |
字段(field) | 文档中的属性 |
映射配置(mappings) | 字段的数据类型、属性、是否索引、是否存储等特性 |
要注意的是:Elasticsearch 本身就是分布式的,因此即便你只有一个节点,Elasticsearch 默认也会对你的数据进行分片和副本操作,当你向集群添加新数据时,数据也会在新加入的节点中进行平衡。
二、Elasticsearch安装[windows]
如下主要针对 windows 环境下的 Elasticsearch 学习。
下载地址:https://www.elastic.co/cn/products/
解压后,进入 bin/ 目录,双击执行 elasticsearch .bat
Elasticsearch 启动后可以看到绑定了两个端口:
- 9300:集群节点间通讯接口【tcp连接方式,性能优于http】
- 9200:客户端访问接口【接收http请求】
9200,我们可以通过浏览器直接访问,9300 则不可以直接访问。
三、Kibana 安装
Kibana 是一个基于 Node.js 的 Elasticsearch 索引库数据统计工具,可以利用 Elasticsearch 的聚合功能,生成各种图表,如柱形图,线状图,饼图等。
而且还提供了操作 Elasticsearch 索引数据的控制台,并且提供了一定的API提示,非常有利于我们学习 Elasticsearch 的语法。
1、配置
我们可以把 Kibana 当成,durid 连接池对于 mysql 的可视化来理解。
下载地址:https://www.elastic.co/cn/downloads/kibana
解压后,进入安装目录下的 config 目录,修改 kibana.yml 文件:
修改elasticsearch服务器的地址,去掉原来的注释:
elasticsearch.url: "http://localhost:9200"
Kibana 的监听端口为 5601:http://127.0.0.1:5601 浏览器打开如下图所示:
Dev Tools 相当于一个命令行窗口工具,带提示,Elasticsearch 执行的数据格式为 json,举例:
POST _analyze{ "analyzer": "ik_max_word", "text": "我喜欢编程"}
四、ik 分词器安装
由于 Elasticsearch 在拆分单词时,是按空格来分,即 hello world 分为 hello 和 world,这是没问题的,但是在拆分中文时也是按照一个汉字一个汉字来拆分。即“我喜欢编程”分为 我、喜、欢、编、程 5个字符,所以就需要用到 IK 分词器这个插件来进行拆分。
Lucene 的 IK 分词器早在 2012 年已经没有维护了,现在我们要使用的是在其基础上维护升级的版本,并且开发为 ElasticSearch 的集成插件了,与 Elasticsearch 一起维护升级,版本也保持一致。
IK下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
注意 ES 与 IK 版本对应地址:https://github.com/medcl/elasticsearch-analysis-ik/tree/2.x
将 zip 包,解压到 Elasticsearch 目录的 plugins 目录中:
然后重启 Elasticsearch
五、基本概念-详细了解
上文也了解到 ES 操作的数据为 json,实际项目中,比如 springboot 中,无须操作 json,都是面向对象编程,但是,学习其实际原理固然重要。
5.1、创建索引
创建索引的请求格式:
- 请求方式:PUT
- 请求路径:/索引库名
- 请求参数:json格式:
{ "settings": { "number_of_shards": 3, "number_of_replicas": 2 }}
- settings:索引库的设置
- number_of_shards: 分片数量
- number_of_replicas:副本数量
示例:
5.2、查看索引设置
语法
Get请求可以帮我们查看索引信息,格式:
GET /索引库名
5.3、删除索引
删除索引使用DELETE请求
语法
DELETE /索引库名
六、映射配置
6.1、创建映射字段
语法
请求方式依然是PUT
PUT /索引库名/_mapping/类型名称{ "properties": { "字段名": { "type": "类型", "index": true, "store": true, "analyzer": "分词器" } }}
- 类型名称:就是前面将的type的概念,类似于数据库中的不同表
字段名:任意填写 ,可以指定许多属性,例如: - type:类型,可以是text、long、short、date、integer、object等
- index:是否索引,默认为true
- store:是否存储,默认为false
- analyzer:分词器,这里的
ik_max_word
即使用ik分词器
示例
发起请求:
PUT niceyoo2/_mapping/goods{ "properties": { "title": { "type": "text", "analyzer": "ik_max_word" }, "images": { "type": "keyword", "index": "false" }, "price": { "type": "float" } }}
响应结果:
{ "acknowledged": true}
6.2、查看映射关系
语法:
GET /索引库名/_mapping
示例:
GET /niceyoo2/_mapping
响应:
{ "niceyoo2": { "mappings": { "goods": { "properties": { "images": { "type": "keyword", "index": false }, "price": { "type": "float" }, "title": { "type": "text", "analyzer": "ik_max_word" } } } } }}
七、字段属性详解
7.1、type
Elasticsearch 中支持的数据类型非常丰富:
我们说几个关键的:
String类型,又分两种:
- text:可分词,不可参与聚合
- keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
Numerical:数值类型,分两类:
- 基本数据类型:long、interger、short、byte、double、float、half_float
- 浮点数的高精度类型:scaled_float
- 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
Date:日期类型
elasticsearch 可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为 long,节省空间。
7.2、index
index影响字段的索引情况。
- true:字段会被索引,则可以用来进行搜索。默认值就是true
- false:字段不会被索引,不能用来搜索
index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。
7.3、store
是否将数据进行额外存储。
在学习lucene和solr时,我们知道如果一个字段的store设置为false,那么在文档列表中就不会有这个字段的值,用户的搜索结果中不会显示出来。
但是在Elasticsearch中,即便store设置为false,也可以搜索到结果。
原因是Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做_source
的属性中。而且我们可以通过过滤_source
来选择哪些要显示,哪些不显示。
而如果设置store为true,就会在_source
以外额外存储一份数据,多余,因此一般我们都会将store设置为false,事实上,store的默认值就是false。
7.4、boost
激励因子,这个与lucene中一样
其它的不再一一讲解,用的不多,大家参考官方文档:
最后
下篇带大家详细了解 elasticsearch 中的
- 增:随机id、自定义id
- 删:带条件删除
- 改:带条件修改
- 查:带条件查询
如果文章有错的地方欢迎指正,大家互相留言交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:niceyoo
了解一下Elasticsearch的基本概念相关推荐
- ElasticSearch的基本概念和集群分布式底层实现
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:张勇 http://tech.dianwoda.com/ 深 ...
- lucene和elasticsearch的前世今生、elasticsearch的核心概念、elasticsearch核心概念 vs. 数据库核心概念(来自学习资料)
1.Lucene和elasticsearch的前世今生 lucene,最先进.功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理 ...
- 有关ElasticSearch的基本概念
本文来说下有关ElasticSearch的基本概念 文章目录 概述 ElasticSearch术语 文档(Document) 索引(Index) 类型(Type) 集群(Cluster) 节点(Nod ...
- 二、 elasticsearch安装和概念
@Author : By Runsen @Date : 2020/6/4 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课 ...
- (三)ElasticSearch的基本概念
0.面向文档 应用中的对象很少只是简单的键值列表,更多时候它拥有复杂的数据结构,比如包含日期.地理位置.另一个对象或者数组. 总有一天你会想到把这些对象存储到数据库中.将这些数据保存到由行和列组成的关 ...
- 一文说清Elasticsearch的核心概念
本文来说下有关Elasticsearch的核心知识 文章目录 概述 生活中的数据 先说说Lucene ES核心概念 集群(Cluster) 分片(Shards) 副本(Replicas) 映射(Map ...
- 谷粒商城微服务分布式高级篇ElasticSearch二——重要概念及原理
文章目录 面向文档 索引 分布式特性 分布式集群 集群健康 添加索引 增加故障转移 横向扩展 继续扩展 应对故障 数据结构 什么是文档? 文档元数据 _index _type _id 其他元数据 _s ...
- Elasticsearch 基本原理和概念(四)
今天和大家分析es基本原理和概念: 从上面的例子中,我们看到了很多熟悉又陌生的概念,比如索引.文档等等.这些概念 和我们平时看到的数据库里的比如索引有什么区别呢? 举个例子,现在我们要保存唐宋诗词,数 ...
- Elasticsearch 入门 核心概念 数据结构 分词器 javaAPI
ElasticSearch 1-今日内容 2-初识ElasticSearch 2.1-基于数据库查询的问题 2.2-倒排索引 2.2.1 评分TF/IDF/BM25计算 2.3-ES存储和查询的原理 ...
最新文章
- unity 关闭自己脚本_Unity3D 挂载的脚本取消勾选居然还会运行!!
- Windows 任务管理器进程详解
- eclipse和idea代码通用吗_python能在苹果手机上运行吗
- python面向对象编程类的成员总结
- leetcode : 基础技巧
- 单交换机VLAN 配置和结果验证(51cto-o8)
- class 第一个元素_selenium之元素定位方式
- Magic Leap是快出产品的节奏,已开放内容开发者注册通道
- .Net MVC中设置默认启动为某区域的视图
- PuTTYgen 使用
- Win10 安装 Tomcat 解压版
- 机器学习 | 牛顿冷却定律
- SuperMap iDesktop 8C 空间分析
- vue生成证书模板 并支持图片和PDF格式下载的小demo
- 项目难于管理的根本原因在于项目的”VUCA”特性
- google浏览器打开axure原型的插件
- Excel 表单元格数字显示为#NAME!
- 岚图卖不动,到底谁的锅?
- 进程概念——PCB详讲
- 新型的网购模式——云购1块夺宝
热门文章
- [html] html标签中的lang属性有什么作用?
- 前端学习(2843):UI插件开发
- “约见”面试官系列之常见面试题之第八十六篇之nexttick(建议收藏)
- 前端学习(2154):webpack横幅plugin的使用
- 前端学习(610):js执行过程
- java学习(47):带参无返回
- java学习(39):九九乘法表
- linux mint视频,Linux Mint 20.1 beta 发布,新增免费视频播放器
- [资源分享] TensorFlow 官方中文版教程来了
- pandas 合并所有列_图解Python表格操作包Pandas