大数据级别资源搜索引擎-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为最小切分。
最小划分,按照意思进行划分
穷举所有划分
如果我们自己需要搜索的词被拆开,比如搜索自己的名字但是三个字被拆开,则需要我们自己加入到分词器字典中。
新建字典
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 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载先请联系作者且注明出处!