elasticsearch知识点记录

一、Elasticsearch和传统数据库数据对比:
在这里插入图片描述
二、因为Elasticsearch有远程脚本执行功能,容易中木马病毒,所以不允许用root用户启动,需要切换到普通用户启动。
三、配置yml结尾的配置文件都需要在冒号后面加空格才可以生效
四、创建索引注意事项
1:索引库名称必须是全部小写,不能以下划线开头,也不能包含逗号
2:如果没有明确指定索引数据的ID,Elasticsearch会自动生成一个随机的ID,需要使用POST,如:curl -XPOST http://localhost:9300/myindex/temp/ -d ‘{“name” : “yaohuaji”}’
五、版本控制
普通关系型数据库使用的是悲观并发控制:每次读取数据时,都悲观地认为别人会修改该数据,所以在读取数据前,先锁定这行数据,确保只有当前读取数据的线程可以修改该行数据。
Elasticsearch使用的是乐观并发控制:每次读取数据时,都 乐观的认为没有人会修改该数据,所以不会锁定数据,但是每次更新数据时都会判断在此期间别人有没有修改该数据,如果有,则更新失败。而为了达到这个效果,Elasticsearch使用的是通过版本号来控制,具体来说,当线程想要修改某文档时,分为以下三步:
1:首先得到要修改的文档,获取其版本号
curl -XGET http://localhost:9300/elasticsearch/emp/1
2:执行修改操作时,将版本号传过去
• curl -XPUT http://localhost:9300/elasticsearch/emp/1?version=1 -d ‘{“name”:“zs",“age”:25}’(覆盖)
• curl -XPOST http://localhost:9300/elasticsearch/emp/1/_update?version=1 -d ‘{“doc”:{“city”:“beijing”,“car”:“BMW”}}’(部分更新)
3:如果传过去的版本号和待更新的文档版本号不一致,就会更新失败。
六、Elasticsearch的四种搜索类型:
1:query and fetch,向当前索引库的所有分片发起请求,每个分片返回文档和排名信息,这种搜索速度最快,只需要访问一次分片,但是最终返回的结果是用户要求size的n倍
2:query then fetch,这种搜索方式分为两步,首先向所有分片发起请求,每个分片返回排序信息(不包括文档信息),然后将所有分片的排序信息整合,重新排序,得到用户要求的TopN,再去相应的分片获取文档。这种方式返回的数量即用户要求的数量,但是,请求了两次分片,速度较慢。
3:DFS query and fetch
4:DFS query then fetch
后面这两种搜索方式多了DFS(初始化散发的过程),使得结果排序更准确。
所谓的初始化散发是指,在查询之前,先把所有分片的词频率和文档率收集起来构成全局的词频率和文档率,之后搜索词的时候各分片依据全局词频率、文档率来排序。这样以来各个分片所得的排名之间才具有可比性。
七、倒排索引
有倒排索引,当然就有正向索引,下面是我简单手画的倒排索引和正向索引示例图:
在这里插入图片描述
DOC代表文档,WORD代表单词。
也就是说正向索引是已文档为基准,存储每个文档中各个单词出现的位置、次数,而倒排索引是已单词为基准,存储每个单词都在哪些文档中出现过。
这也就解释了为什么Elasticsearch使用的是倒排索引而非正向索引。因为如果我们搜索一个单词时,按照正向索引的数据结构,需要扫描所有的文档,速度太慢,无法做到实时响应。而倒排索引可以直接定位到该单词,可以实时响应。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值