Elasticsearch之倒排索引及索引操作
作者:Jeff的技术栈 时间:2023-10-28 00:38:38
倒排索引
一 倒排索引是什么
倒排索引源于实际应用中需要根据属性的值来查找记录,这种索引表中的每一个项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而成为倒排索引。带有倒排索引的文件我们称之为倒排索引文件,简称倒排文件
二 举例
例如有如下三个文件:
文件A:通过Python django搭建网站
文件B:通过Python scrapy爬取网站数据
文件C:scrapy-redis分布式爬虫
现在我们要查询,带有Python的文件,正常是对每个文件进行遍历,每个文件遍历一次,如果文件特别大,每个文件有一亿个字符,总共有一亿各文件,每个我们都要遍历,非常消耗资源
在存储文件之前,先对文件进行分析,将文件分词,对分词建立索引,例如下面一句话
1 今天是星期天我们出去玩
2 明天是星期天,放假
3 今天天气很晴朗
4 xxx
5 他们出去玩了
关键词 | 文章 |
---|---|
今天 | 文章1,文章3 |
星期天 | 文章2 |
出去玩 | 文章5,文章1 |
实际上es在做存储的时候,更详细,如下表
关键词 | 文章 |
---|---|
今天 | (文章1,<2,10>,2) (文章3,<8>,1) |
星期天 | (文章2,<12,25,100>,3) |
出去玩 | (文章5,<11,24,89>,3)(文章1,<8,19>,2) |
今天出现在哪个文章,出现的位置和出现的次数
三 倒排索引待解决的问题
1 大小写转换问题,如python和Python应该为同一个词
2 词干抽取,looking和look应该处理为同一个词
3 分词,如 屏蔽系统 是屏蔽 和系统两个词还是 为屏蔽系统一个词
4 倒排索引文件过大,需要压缩编码
索引操作
具体操作可以查看官方文档
https://www.elastic.co/guide/en/elasticsearch/reference/7.5/indices.html>
官方2版本的中文文档
https://www.elastic.co/guide/cn/elasticsearch/guide/current/index-settings.html
一 索引初始化
#新建一个lqz2的索引,索引分片数量为5,索引副本数量为1
PUT lqz2
{
"settings": {
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
}
}
'''
number_of_shards
每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。
number_of_replicas
每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。
'''
二 查询索引配置
#获取lqz2索引的配置信息
GET lqz2/_settings
#获取所有索引的配置信息
GET _all/_settings
#同上
GET _settings
#获取lqz和lqz2索引的配置信息
GET lqz,lqz2/_settings
三 更新索引
#修改索引副本数量为2
PUT lqz/_settings
{
"number_of_replicas": 2
}
#如遇到报错:cluster_block_exception,因为
#这是由于ES新节点的数据目录data存储空间不足,导致从master主节点接收同步数据的时候失败,此时ES集群为了保护数据,会自动把索引分片index置为只读read-only
PUT _all/_settings
{
"index": {
"blocks": {
"read_only_allow_delete": false
}
}
}
四 删除索引
#删除lqz索引
DELETE lqz
来源:https://www.cnblogs.com/guyouyin123/p/13308588.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
mysql巡检脚本(必看篇)
如何使用Python快速生成gif图
![](https://img.aspxhome.com/file/2023/1/103021_0s.gif)
go sync.Once实现高效单例模式详解
《解剖PetShop》之四:PetShop之ASP.NET缓存
![](https://img.aspxhome.com/file/2023/5/122825_0s.gif)
python实现各种插值法(数值分析)
![](https://img.aspxhome.com/file/2023/3/100973_0s.png)
python使用Queue在多个子进程间交换数据的方法
ThinkPHP5中如何使用redis
![](https://img.aspxhome.com/file/2023/9/55499_0s.png)
pyqt 实现在Widgets中显示图片和文字的方法
![](https://img.aspxhome.com/file/2023/4/100844_0s.jpg)
遗传算法之Python实现代码
python在新的图片窗口显示图片(图像)的方法
![](https://img.aspxhome.com/file/2023/7/124307_0s.jpg)
Javascript中Eval函数的使用
获取python文件扩展名和文件名方法
JS获取数组最大值、最小值及长度的方法
python数据化运营的重要意义
SQL Server 2000中的触发器使用
python flappy bird小游戏分步实现流程
![](https://img.aspxhome.com/file/2023/8/66888_0s.png)
vue项目页面嵌入代码块vue-prism-editor的实现
![](https://img.aspxhome.com/file/2023/4/132934_0s.png)