了解一下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

posted @ 2019-05-14 21:42 niceyoo 阅读(...) 评论(...) 编辑 收藏

了解一下Elasticsearch的基本概念相关推荐

  1. ElasticSearch的基本概念和集群分布式底层实现

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:张勇 http://tech.dianwoda.com/ 深 ...

  2. lucene和elasticsearch的前世今生、elasticsearch的核心概念、elasticsearch核心概念 vs. 数据库核心概念(来自学习资料)

    1.Lucene和elasticsearch的前世今生 lucene,最先进.功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理 ...

  3. 有关ElasticSearch的基本概念

    本文来说下有关ElasticSearch的基本概念 文章目录 概述 ElasticSearch术语 文档(Document) 索引(Index) 类型(Type) 集群(Cluster) 节点(Nod ...

  4. 二、 elasticsearch安装和概念

    @Author : By Runsen @Date : 2020/6/4 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课 ...

  5. (三)ElasticSearch的基本概念

    0.面向文档 应用中的对象很少只是简单的键值列表,更多时候它拥有复杂的数据结构,比如包含日期.地理位置.另一个对象或者数组. 总有一天你会想到把这些对象存储到数据库中.将这些数据保存到由行和列组成的关 ...

  6. 一文说清Elasticsearch的核心概念

    本文来说下有关Elasticsearch的核心知识 文章目录 概述 生活中的数据 先说说Lucene ES核心概念 集群(Cluster) 分片(Shards) 副本(Replicas) 映射(Map ...

  7. 谷粒商城微服务分布式高级篇ElasticSearch二——重要概念及原理

    文章目录 面向文档 索引 分布式特性 分布式集群 集群健康 添加索引 增加故障转移 横向扩展 继续扩展 应对故障 数据结构 什么是文档? 文档元数据 _index _type _id 其他元数据 _s ...

  8. Elasticsearch 基本原理和概念(四)

    今天和大家分析es基本原理和概念: 从上面的例子中,我们看到了很多熟悉又陌生的概念,比如索引.文档等等.这些概念 和我们平时看到的数据库里的比如索引有什么区别呢? 举个例子,现在我们要保存唐宋诗词,数 ...

  9. Elasticsearch 入门 核心概念 数据结构 分词器 javaAPI

    ElasticSearch 1-今日内容 2-初识ElasticSearch 2.1-基于数据库查询的问题 2.2-倒排索引 2.2.1 评分TF/IDF/BM25计算 2.3-ES存储和查询的原理 ...

最新文章

  1. unity 关闭自己脚本_Unity3D 挂载的脚本取消勾选居然还会运行!!
  2. Windows 任务管理器进程详解
  3. eclipse和idea代码通用吗_python能在苹果手机上运行吗
  4. python面向对象编程类的成员总结
  5. leetcode : 基础技巧
  6. 单交换机VLAN 配置和结果验证(51cto-o8)
  7. class 第一个元素_selenium之元素定位方式
  8. Magic Leap是快出产品的节奏,已开放内容开发者注册通道
  9. .Net MVC中设置默认启动为某区域的视图
  10. PuTTYgen 使用
  11. Win10 安装 Tomcat 解压版
  12. 机器学习 | 牛顿冷却定律
  13. SuperMap iDesktop 8C 空间分析
  14. vue生成证书模板 并支持图片和PDF格式下载的小demo
  15. 项目难于管理的根本原因在于项目的”VUCA”特性
  16. google浏览器打开axure原型的插件
  17. Excel 表单元格数字显示为#NAME!
  18. 岚图卖不动,到底谁的锅?
  19. 进程概念——PCB详讲
  20. 新型的网购模式——云购1块夺宝

热门文章

  1. [html] html标签中的lang属性有什么作用?
  2. 前端学习(2843):UI插件开发
  3. “约见”面试官系列之常见面试题之第八十六篇之nexttick(建议收藏)
  4. 前端学习(2154):webpack横幅plugin的使用
  5. 前端学习(610):js执行过程
  6. java学习(47):带参无返回
  7. java学习(39):九九乘法表
  8. linux mint视频,Linux Mint 20.1 beta 发布,新增免费视频播放器
  9. [资源分享] TensorFlow 官方中文版教程来了
  10. pandas 合并所有列_图解Python表格操作包Pandas