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

文章目录

  • 01、初识 Elasticsearch
    • 正向索引和倒排索引
    • 索引
    • MySQL与ES的概念映射
    • 安装ES
    • 分词器
    • 分词器的设置

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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/139164.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitHub Action 通过SSH 自动部署到云服务器上

准备 正式开始之前&#xff0c;你需要掌握 GitHub Action 的基础语法&#xff1a; workflow &#xff08;工作流程&#xff09;&#xff1a;持续集成一次运行的过程&#xff0c;就是一个 workflow。name: 工作流的名称。on: 指定次工作流的触发器。push 表示只要有人将更改推…

【数据结构】栈

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 栈-Stack 1. 什么是栈2. 栈的使用3.…

JAVA基础(JAVA SE)学习笔记(二)变量与运算符

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 正文 第一阶段&#xff1a;Java基本语法 1. Java 语言概述 JAVA基础&#xff08;JAVA SE&#xff09;学习…

黑豹程序员-架构师学习路线图-百科:Maven

文章目录 1、什么是maven官网下载地址 2、发展历史3、Maven的伟大发明 1、什么是maven Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and…

ROS opencv 人脸识别

人脸识别需要在输入的图像中确定人脸&#xff08;如果存在&#xff09;的位置、大小和姿态&#xff0c;往往用于生物特征识别、视频监听、人机交互等应用中。2001年&#xff0c;Viola和Jones提出了基于Haar特征的级联分类器对象检测算法&#xff0c;并在2002年由Lienhart和Mayd…

使用 MRVA CodeQL 对开源项目进行大规模漏洞挖掘

1.什么是 MRVA? CodeQL相关的资料目前已经非常多了&#xff0c;但是大部分都集中在介绍ql语法以及基本使用上&#xff0c;更多关注的是对单个项目进行分析。那么如何批量进行漏洞挖掘呢&#xff1f;这里介绍下MRVA。 MRVA是multi-repository variant analysis 的缩写。其实是…

华为云云耀云服务器L实例评测|windows系统3389防爆破之安全加固教程

为什么要选择华为云云耀云服务器L实例&#xff1a; 华为云在全国范围内建立了多个数据中心&#xff0c;这些数据中心之间相互冗余&#xff0c;以确保高可靠性和可用性&#xff0c;用户可以选择最适合的区域来部署应用程序&#xff0c;以实现更好的性能和延迟。 相对于传统的物…

JavaSE入门---认识运算符

文章目录 算术运算符关系运算符逻辑运算符位运算符移位运算符条件运算符运算符的优先级 计算机的最基本的用途之一就是执行数学运算&#xff0c;运算过程中就会用到运算符&#xff0c;那什么是运算符呢&#xff1f; 即&#xff1a;对操作数进行操作的符号&#xff0c;不同运算符…

DevicData-D-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复

引言&#xff1a; 网络犯罪分子采用越来越复杂和具有破坏性的方式威胁着我们的数字安全。本文将深入介绍DevicData-D-XXXXXXXX勒索病毒的特点&#xff0c;提供关于如何应对被其加密的数据文件的恢复方法&#xff0c;并分享一些预防措施&#xff0c;以帮助您保护自己免受这一数字…

人工智能时代大模型算法之文心大模型4.0

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

R语言进度条:txtProgressBar功能使用方法

R语言进度条使用攻略 在数据处理、建模或其他计算密集型任务中&#xff0c;我们常常会执行一些可能需要很长时间的操作。 在这些情况下&#xff0c;展示一个进度条可以帮助我们了解当前任务的进度&#xff0c;以及大约还需要多长时间来完成&#xff0c;R语言提供了几种简单且灵…

强大的下载管理器:Progressive Downloader for Mac

Progressive Downloader for Mac是一种强大的下载管理器&#xff0c;它可以帮助用户更快速、更稳定地下载文件。相比于其他下载工具&#xff0c;PD下载管理器具有很多独特的功能和优势&#xff0c;本文将对其进行详细推广。 在数字化时代&#xff0c;下载已成为我们日常工作中必…