一、初识 Elasticsearch:概念,安装,设置分词器

01、初识 Elasticsearch

本次ES基于:7.12.1 版本
学习资源为:https://www.bilibili.com/video/BV1Gh411j7d6

什么是ES(Elasticsearch)

elasticsearch 结合 kibana、Loastash、Beats,也就是elastic stack (ELK)。被广泛应用在日志数据分析、实时监控等领域。

elasticsearch 是 elastic stack 的核心,负责存储、搜索、分析数据。

在这里插入图片描述

ES的发展

ES底层基于 Lucene

Lucene 是一个 Java 语言的搜索引擎类库,是 Apache 公司的顶级项目,由 DougCutting 于1999年研发官网地址: https://lucene.apache.org/。

Lucene的优势:

  • 易扩展
  • 高性能(基于倒排索引)

Lucene的缺点:

  • 只限于Java语言开发
  • 学习曲线陡峭
  • 不支持水平扩展

2004年shay Banon基于Lucene开发了Compass

2010年shay Banon 重写了 Compass,取名为Elasticsearch。官网地址: https://www.elastic.co/cn/。相比与lucene,elasticsearch具备下列优势:

  • 支持分布式,可水平扩展
  • 提供 Restful 接口,可被任何语言调用

为什么学习elasticsearch?

搜索引擎技术排名:

  1. Elasticsearch:开源的分布式搜索引擎

  2. Splunk:商业项目

  3. Solr:Apache的开源搜索引擎

正向索引和倒排索引

传统数据库(如MySQL)采用正向索引,例如给下表 (tb goods)中的id创建索引

在这里插入图片描述

elasticsearch采用倒排索引:

  • 文档(document):每条数据就是一个文档

  • 词条(term):文档按照语义分成的词语

在这里插入图片描述

倒排索引是根据词条查找文档。

索引

索引(index):相同类型的文档的集合。不同的JSON结构就代表一个不同的索引。

映射 (mapping):索引中文档的字段约束信息,类似表的结构约束

在这里插入图片描述

MySQL与ES的概念映射

在这里插入图片描述

Mysql: 擅长事务类型操作,可以确保数据的安全和一致性。

Elasticsearch:擅长海量数据的搜索、分析、计算。

在这里插入图片描述

安装ES

使用docker创建网络,拉取镜像。

docker network create es-net
docker pull elasticsearch:7.12.1
docker pull kibana:7.12.1

运行命令

docker run -d \
--name es  \
-e"ES_JAVA_OPTS=-Xms512m -Xmx512m"  \
-e"discovery.type=single-node" \
-v es-data:/usr/share/eTasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
  • discovery.type=single-node:单点模式
  • es-data:数据目录
  • es-plugins:插件目录
  • 9200:HTTP端口。9300:各个ES容器互联的端口。

访问

http://ip:9200/
{
"name": "a340f52223b0",
"cluster_name": "docker-cluster",
"cluster_uuid": "ppw1gfsiQbqDdsNfmivM0A",
"version": {
    "number": "7.12.1",
    "build_flavor": "default",
    "build_type": "docker",
    "build_hash": "3186837139b9c6b6d23c3200870651f10d3343b7",
    "build_date": "2021-04-20T20:56:39.040728659Z",
    "build_snapshot": false,
    "lucene_version": "8.8.0",
    "minimum_wire_compatibility_version": "6.8.0",
    "minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}

运行Kibana

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
kibana:7.12.1  
  • ELASTICSEARCH_HOSTS=http://es:9200 : es:9200 为上述 --name es \ 时设置的名字。

分词器

es在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。

我们在kibanaDevTools中测试:

POST /_analyze
{
  "analyzer": "standard",
  "text": "南京市长江大桥。"
}

安装分词器

下载:https://github.com/medcl/elasticsearch-analysis-ik/releases?page=6

解压后上传到 es-plugins 中,可通过如下目录查看。

docker volume inspect es-plugins
{
    "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
}

在这里插入图片描述

docker restart es

测试ik分词

ik_smart:粗粒度

请求:
POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "南京市长江大桥。"
}

响应:

{
  "tokens" : [
    {
      "token" : "南京市",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "长江大桥",
      "start_offset" : 3,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 1
    }
  ]
}

请求:ik-max-word:细粒度

请求:
POST /_analyze
{
  "analyzer": "ik_max_word",
  "text": "南京市长江大桥。"
}
-----------------------------
{
  "tokens" : [
    {
      "token" : "南京市",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "南京",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 1
    },
....
  ]
}

分词器的设置

添加字典

要拓展ik分词器的词库,只需要修改一个ik分词器目录中的config目录中的IkAnalyzer.cfg.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">ext_dict.dic</entry>
    <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">stopword.dic</entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

去除停用词

<entry key="ext_stopwords">stopword.dic</entry>

结束语

下一篇:二、ElasticSearch中索引库与文档操作
学习资源为:https://www.bilibili.com/video/BV1Gh411j7d6

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值