大数据级别资源搜索引擎-elasticSearch

本文最后更新于:4 个月前

大数据开发入门三部曲,elasticSearch-大数据时代下的资源搜索引擎。


ElasticSearch笔记

全文搜索引擎

前言

Lucene是一套信息检索的工具包!jar包,不包含搜索引擎系统

包含的:索引结构!读写索引的工具!排序,搜索规则…工具类!

Lucene和ElasticSearch的关系

ElasticSearch 是基于Luncene 做了一些封装和增强

ElasticSearch概述

Elaticsearch,简称为es, 是一个建立在全文搜索引擎框架 Apache Lucene™ 基础上的开源搜索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理**PB级别(大数据时代)**的数据。同时Elasticsearch是使用 Java 编写的,采用了 Lucene 来实现索引与搜索的功能。当你使用它做全文搜索时,只需要使用简单流畅的 RESTful API 即可,并不需要了解 Lucene 背后复杂的的运行原理。

目前 Elasticsearch 有很多地方超越了 Lucene,它不仅可以实现全文搜索功能,还可以完成以下工作:

  • 分布式实时文档存储,并将每一个字段都编入索引,使其可以被搜索。
  • 分布式实时分析与搜索引擎。
  • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
  • 可以轻松地通过客户端或者任何你喜欢的程序语言与 Elasticsearch 的 RESTful API 进行通信

Elasticsearch 的上手是非常简单的。它附带了很多非常合理的默认值,这让初学者很好地避免一上手就要面对复杂的理论,安装完成就可以马上投入使用了。

ElasticSearch安装

ElasticSearch客户端、界面工具,手动提升ElasticSearch版本

解压即可使用(安装包可以加我QQ或微信私聊)。

目录

  • bin 启动文件
  • config 配置文件
    • log4j2 日志配置文件
    • jvm.option Java虚拟机相关配置,服务器内存不足需要修改配置文件
    • elasticsearch.yml elasticsearch配置文件
  • lib 相关jar包
  • logs 日志
  • modules 功能模块
  • plugins 插件 ik

启动

运行elasticsearch.bat 访问地址127.0.0.1:9200

1
"tagline" : "You Know, for Search"

安装可视化插件

head-master是一个前端项目,需要安装npm环境

进入head-master解压后的文件夹,输入cmd进入控制台

输入cnpm install进行依赖下载及安装

安装完后输入npm run start启动

如果遇到如下报错,则是端口被占用

cmd中输入netstat -ano查找被占用的进程号,进入任务管理器结束进程即可

下一步,解决客户端和图形界面的跨域问题

打开elasticsearch.yml,添加允许跨域

继续打开head-master地址,出现集群健康值即为连接成功

建议把head-master当成数据展示工具

而查询数据则使用Kibana

安装Kibana

版本需要和Elasticsearch的版本对应,也和ElasticSearch一样,解压即用

默认5601端口,进入。

之后的所有操作都在这里进行

ES核心概念

至此环境搭建也就告一段落,学习大数据需要搭建的环境比较多,接下来则是ElasticSearch的核心概念

elasticsearch面向文档,一切都是JSON

物理设计

elasticsearch在后台把每个索引划分成多个分片,每个分片可以在集群中的不同服务器间迁移。一个人就是一个集群!默认的集群名称就是elasticsearch

文档:数据

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

  • 自我包含,一篇文档同时包含字段和对应的值,也就是同时包含key:value !
  • 可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的! {就是一个json对象 ! fastjson进行自动转换 !}
  • 灵活的结构,文档不依赖预先定义的模式,我们知道关系型数据库中,要提前定义字段才能使用,在elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个新的字段。

尽管我们可以随意的新增或者忽略某个字段,但是,每个字段的类型非常重要,比如一个年龄字段类型,可以是字符串也可以是整形。因为elasticsearch会保存字段和类型之间的映射及其他的设置。这种映射具体到每个映射的每种类型,这也是为什么在elasticsearch中,类型有时候也称为映射类型。

类型:数据类型映射

类型是文档的逻辑容器,就像关系型数据库一样,表格是行的容器。类型中对于字段的定义称为映射,比如name映射为字符串类型。elasticsearch会自动的将新字段加入映射,但是这个字段的不确定它是什么类型,elasticsearch就开始猜,如果这个值是18,那么elasticsearch会认为它是整形。但是elasticsearch也可能猜不对,所以最安全的方式就是提前定义好所需要的映射。

索引:数据库

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

ES可以理解为数据库,但是要淡化表的概念。

集群和节点

一个集群至少又一个节点,一个节点就是一个elasticsearch进程,节点可以又多个索引,每个主分片又会有一个副本。

倒排索引

建立新的索引,只统计各标签的出现的所有文章。查找时只看倒排索引。

IK分词器

将一段中文拆分为多个词,利用多个词作为关键字进行匹配。比如:狂神说拆分为:狂神,狂神说等等..

IK分词器:中文分词器

解压至elasticsearch的plugins文件夹下即可,重启ES

重启可以看见加载插件提示


使用

IK分词器提供:ik_smart和ik_max_word两个分词算法。ik_max_word为最细粒度划分,ik_smart为最小切分。

最小划分,按照意思进行划分

穷举所有划分

image-20220621170950401

如果我们自己需要搜索的词被拆开,比如搜索自己的名字但是三个字被拆开,则需要我们自己加入到分词器字典中。

新建字典

ik分词器增加自己的配置。

ES基本操作-Rest风格

method url地址 描述
PUT(创建,修改) localhost:9200/索引名称/类型名称/文档id 创建文档(指定文档id)
POST(创建) localhost:9200/索引名称/类型名称 创建文档(随机文档id)
POST(修改) localhost:9200/索引名称/类型名称/文档id/_update 修改文档
DELETE(删除) localhost:9200/索引名称/类型名称/文档id 删除文档
GET(查询) localhost:9200/索引名称/类型名称/文档id 查询文档通过文档ID
POST(查询) localhost:9200/索引名称/类型名称/文档id/_search 查询所有数据

创建索引

1
2
3
4
5
PUT /test/type/1
{
"name": "狂神说",
"age": 3
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载先请联系作者且注明出处!