全文检索
数据总体分为两种:结构化数据和非结构化数据。
- 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
数据库这些直接进行sql语句进行查询,很快就能得到结果 - 非结构化数据:指不定长或无固定格式的数据,如邮件,word 文档等磁盘上 的文件 ,
非结构化数据则有俩种,顺序扫描法(从头找到尾)、全文检索 (非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有 一定结构的数据进行搜索)
Lucene
Lucene 是一个高效的,采用倒排文件索引结构 ,基于Java 的全文检索库。
Elastic
Elastic有一条完整的产品线:Elasticsearch、Kibana、Logstash等,前面说的三个就是大家常说的ELK技术栈。
ElasticSearch(全文检索库)
底层用的是Lucene实现的,本质也是存储数据,很多概念与MySQL类似的。
详细说明:
概念 | 说明 |
---|---|
索引库 (indices) | indices是index的复数,代表许多的索引, |
类型(type) | 类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,类似 数据库中的表概念。数据库表中有表结构,也就是表中每个字段的约束信息; 索引库的类型中对应表结构的叫做 映射(mapping) ,用来定义每个字段的约 束。 |
文档 (document) | 存入索引库原始的数据。比如每一条商品信息,就是一个文档 |
字段(field) | 文档中的属性 |
映射配置 (mappings) | 字段的数据类型、属性、是否索引、是否存储等特性 |
创建索引的请求格式:
-
请求方式:PUT
-
请求路径:索引库名
-
请求参数:json格式:
{ "settings": { "属性名": "属性值" } }
settings:就是索引库设置,其中可以定义索引库的各种属性,目前我们可以不设置,都走默认。
这里会有红色提示,7.0之前默认会创建5个shared,7.0开始之后创建一个shard,可以在创建索引时加上setting:
PUT itheima1
{
"settings": {
"number_of_shards": 5
}
}
可以指定shards为1
PUT itheima2
{
"settings": {
"number_of_shards": 1
}
}
通过Head可以看到索引信息
查看索引库
语法
GET 索引库名
调用示例:
GET itheima
GET itheima?include_type_name=false
删除索引库
语法
DELETE 索引库名
调用示例:
DELETE itheima
再次查看itheima:
也可以用HEAD请求,查看索引是否存在:
3.6 操作类型及映射
有了 索引库 ,等于有了数据库中的 database 。接下来就需要索引库中的 类型 了,也就是数据库中的
表 。创建数据库表需要设置字段约束,索引库也一样,在创建索引库的类型时,需要知道这个类型下
有哪些字段,每个字段有哪些约束信息,这就叫做 字段映射(mapping)
字段的约束我们在学习Lucene中我们都见到过,包括到不限于:
- 字段的数据类型
- 是否要存储
- 是否要索引
- 是否分词
- 分词器是什么
我们一起来看下创建的语法
创建字段映射
语法
PUT 索引库名/_mapping/类型名称
{
"properties": {
"字段名": {
"type": "类型",
"index": true,
"store": true,
"analyzer": "分词器"
}
}
}
类型名称:就是前面将的type的概念,类似于数据库中的表 字段名:任意填写,但是在ES7版本后,一个索引库只能有一个类型,为了兼容ES7,这里的类型最好设置为_doc
,可以参考:
https://www.elastic.co/guide/en/elasticsearch/reference/7.7/removal-of-types.html#_schedule_for_removal_of_mapping_types
下面指定许多属性,例如:
- type:类型,可以是text、long、short、date、integer、object等
- index:是否索引,默认为true
- store:是否存储,默认为false
- analyzer:分词器,这里的 ik_max_word 即使用ik分词器
请求示例:
PUT itheima1/_mapping/goods
{
"properties": {
"title":{
"type": "text",
"analyzer": "ik_max_word"
},
"images":{
"type": "keyword",
"index": false
},
"price":{
"type": "float"
}
}
}
响应结果:
{
"acknowledged" : true
}
上述案例中,就给heima1这个索引库添加了一个名为 goods 的类型,并且在类型中设置了3个字段:
- title:商品标题
- images:商品图片
- price:商品价格
并且给这些字段设置了一些属性,至于这些属性对应的含义,我们在后续会详细介绍。
查看映射关系
语法:
查看某个索引库中的所有类型的映射
GET /索引库名/_mapping
如果要查看某个类型映射,可以再路径后面跟上类型名称
GET /索引库名/_mapping/映射名
请求示例:
GET itheima1/_mapping
响应:
{
"itheima1" : {
"mappings" : {
"goods" : {
"properties" : {
"images" : {
"type" : "keyword",
"index" : false
},
"price" : {
"type" : "float"
},
"title" : {
"type" : "text",
"analyzer" : "ik_max_word"
}
}
}
}
}
}
查看具体类型
GET itheima1/_mapping/goods
映射属性详解
type
Elasticsearch中支持的数据类型非常丰富:
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/mapping-types.html
我们说几个关键的:
-
String类型,又分两种:
- text:可分词,不可参与聚合
- keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
-
Numerical:数值类型,分两类
- 基本数据类型:long、interger、short、byte、double、float、half_float
- 浮点数的高精度类型:scaled_float
需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存
储,取出时再还原。
-
Date:日期类型
elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省
空间。 -
Array:数组类型
进行匹配时,任意一个元素满足,都认为满足
排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序 -
Object:对象
{ "name": "Jack", "age": 21, "girl": { "name": "Rose", "age": 21 } }
如果存储到索引库的是对象类型,例如上面的girl,会把girl编程两个字段:girl.name和girl.age
index
index影响字段的索引情况。
- true:字段会被索引,则可以用来进行搜索过滤。默认值就是true
- false:字段不会被索引,不能用来搜索
index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。
store
是否将数据进行额外存储。
在学习lucene时,我们知道如果一个字段的store设置为false,那么在文档列表中就不会有这个字段的
值,用户的搜索结果中不会显示出来。
但是在Elasticsearch中,即便store设置为false,也可以搜索到结果。
原因是Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做 _source 的属性
中。而且我们可以通过过滤 _source 来选择哪些要显示,哪些不显示。
而如果设置store为true,就会在 _source 以外额外存储一份数据,多余,因此一般我们都会将store设
置为false,事实上,store的默认值就是false。
boost
权重,新增数据时,可以指定该数据的权重,权重越高,得分越高,排名越靠前。
其它属性:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/mapping-params.html
|
在linx下安装过程
在Windows下安装VMware Workstation,如果是Win10系统,推荐使用15.5以上版本,下载地址:
https://pan.baidu.com/s/1AfGGkGZy7OzSUj41gP_lpQ 提取码:hvsj
可以自己安装CentOS镜像,下载地址:
https://pan.baidu.com/s/1BqZs2G55ijpMtSLVAxXfgQ 提取码:5i03
也可以使用VMX文件加载,下载地址:
https://pan.baidu.com/s/1xJElEks0w3XF_RBhF-mAdw 提取码:rzyo
# 下载rpm包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.10.rpm
# 下载校验包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.10.rpm.sha512
# 安装校验工具
yum install perl-Digest-SHA
# 校验结果输出OK
shasum -a 512 -c elasticsearch-6.8.10.rpm.sha512
# 直接从软件包中复制安装包到/opt/soft目录
# 解压jdk jdk路径为/opt/soft/jdk1.8.0_231/
tar xzf jdk-8u231-linux-x64.tar.gz
# 设置JAVA_HOME
vim /etc/profile
# 在最末尾添加
export JAVA_HOME=/opt/soft/jdk1.8.0_231/
export PATH=$PATH:$JAVA_HOME/bin
# 刷新配置
source /etc/profile
# 验证Java版本
java -version
# 编辑elasticsearch配置
vim /etc/sysconfig/elasticsearch
JAVA_HOME=/opt/soft/jdk1.8.0_231/
# 安装rpm包
rpm --install elasticsearch-6.8.10.rpm
# 删除rpm包
rpm -e elasticsearch-6.8.10
# 开启服务
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
# 查看是否安装完成
curl http://localhost:9200
安装Head插件
# 在ES安装目录中找到插件目录,并新建ik目录
cd /usr/share/elasticsearch/plugins/ && mkdir ik
# 安装zip解压
yum install -y unzip
# 复制ik分词器到目录中,并解压
unzip elasticsearch-analysis-ik-6.8.10.zip
# 重启ES
service elasticsearch restart
Kibana
下载地址:https://www.elastic.co/guide/en/kibana/current/install.html
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.8.10-x86_64.rpm
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.8.10-x86_64.rpm.sha512
shasum -a 512 -c kibana-6.8.10-x86_64.rpm.sha512
sudo rpm --install kibana-6.8.10-x86_64.rpm
# kibana 的配置文件在 /etc/kibana/
vim /etc/kibana/kibana.yml
server.host: "192.168.85.135"
# 找到kibana的安装目录 /usr/share/kibana/
cd /usr/share/kibana/
# 开启防火墙端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --reload
# 启动kibana
nohup bin/kibana >> kibana.log 2>&1 &
# 查看应用运行端口
ps -ef|grep kibana
上一篇: 快看,老师收拾学生呐!
下一篇: 您踢我吧