初识ElasticSearch

初识ElasticSearch

Elasticsearch 简称 ES,是一个开源的 高扩展分布式全文检索引擎,它可以近乎实时的存储、检索数据,本身扩展性好,可以扩展到上百台服务器,处理 PB 级别的数据。ES 也使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RestFul API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。


Part 1. ES安装

环境说明

操作系统:windows

ES版本:7.9.1

Kibana:7.9.1

ES安装

ES开箱即用,但需要配置跨域,找到config文件夹下的elasticsearch.yml,做如下配置即可。

http.cors.enabled: true
http.cors.allow-origin: "*"

找到bin目录的elasticsearch.bat,执行即可启动 ES 。

在这里插入图片描述

elasticsearch-head安装

  1. 首先需要确认安装nodejs(下载安装nodejs即可),为了提高效率,采用国内淘宝的cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org

在这里插入图片描述

此时输入cnpm -v,报错:无法加载文件 … ,因为在此系统上禁止运行脚本。有关详细信息…

原因是无法执行脚本,以管理员身份运行 power shell ,输入

set-ExecutionPolicy RemoteSigned

然后再执行cnpm -v,问题解决。

在这里插入图片描述

  1. 从 github 上克隆elasticsearch-head

  2. 到克隆目录下,执行cmd,执行以下命令

cnpm install
npm run start

启动成功
在这里插入图片描述

kibana安装

  1. 下载kibana

  2. 汉化,找到config目录下的kebana.ymlzh-CN

在这里插入图片描述

  1. 启动,找到 bin 目录下kibana.bat

在这里插入图片描述

  1. 访问,端口5601

在这里插入图片描述


Part 2. ES核心概念

  1. 索引
  2. 字段类型(mapping)
  3. 文档
  4. 分片(倒排索引)

集群、节点、索引(库)、类型(表)、文档(行)、分片、映射

elasticsearch 是面向文档,一切都是json

elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档中又包含多个字段(列)。

物理设计:elasticsearch 在后台把每个索引划分成多个分片,每个分片可以在集群中的不同服务器间迁移。

逻辑设计:一个索引类型中,包含多个文档,比如说文档1,文档2.当我们索引一篇文档时,可以通过这样的一个顺序找到它:索引 -> 类型 -> 文档ID,通过这个组合我们就能索引到某个具体的文档。注意:ID不必是整数,实际上它是个字符串。

文档

elasticsearch 是面向文档的,那么就意味着索引和搜索数据的最小单位是文档,文档有几个中药属性:

  • 自我包含,同时包含key:value
  • 可以是层次型的,就是一个json对象,fastjson进行自动转换
  • 灵活的结构

索引

就是数据库

索引是映射类型的容器,elasticsearch 中的索引是个非常大的文档集合。索引存储了映射类型的字段和其他设置。然后它们被存储到了各个分片上。

物理设计:节点和分片

一个集群至少有一个节点,而一个节点就是一个 elasticsearch 进程,节点可以有多个索引默认的,如果你创建索引,那么索引将会由5个分片(primary shard,又称主分片)构成,每一个主分片会有一个副本(replica shard,又称复制分片)。

主分片和复制分片都不会在同一个节点内,实际上,一个分片是一个 Lucene 索引,一个包含倒排索引的文件目录,倒排索引的结构使得 elasticsearch 在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的关键字。

倒排索引

elasticsearch 使用的是一种称为倒排索引的结构,采用 Lucene 倒排索作为底层。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。

在这里插入图片描述


Part 3. IK分词器

IK提供了两个分词算法:ik_smart 和 ik_max_word ,其中 ik_smart 为最少切分,ik_max_word 为最细粒度划分。

下载

github地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

然后解压到 plugin 目录下,新建的 ik 目录。

重启 ES 和 kibana 。

查看不同的分词器效果

ik_smart,最少切分

在这里插入图片描述

ik_max_word,穷尽词库的可能

在这里插入图片描述

分词器字典

找到分词器插件的config目录中的IKAnalyzer.cfg.xml

在这里插入图片描述

新建一个自己的字典,例如:kuang.dic

配置到 xml 中:

<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">kuang.dic</entry>

重启 ES 。


Part 4. Rest风格说明

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

在这里插入图片描述

基础测试

  1. 创建一个索引
PUT /索引名/~类型名~/文档id
{
	请求体
}

例如:

PUT /test1/type1/1
{
	"name": "狂神说",
	"age": 3
}

执行:

在这里插入图片描述

查看效果:

在这里插入图片描述

PUT testdb
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "desc": {
        "type": "keyword"
      }
    }
  }
}


PUT testdb/_doc/1
{
  "name": "狂神说Java name",
  "desc": "狂神说Java name"
}
PUT testdb/_doc/2
{
  "name": "狂神说Java name",
  "desc": "狂神说Java desc2"
}
POST testdb/_doc/1/_update
{
  "doc":{
    "desc": "狂神说Java desc"
  }
}

注意:keyword 字段不会被分词器解析。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值