elasticsearc内容中为什么要有version,为什么要进行版本控制
为了保证在多线程操作下的准确性
2.什么是乐观锁和悲观锁
悲观锁:假设会有冲突发生,屏蔽一切可能违反数据准确性的操作
什么是乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性
3内部版本控制和外部版本控制
内部版本控制:_version自增长,修改数据后,_version会自动的加1
外部版本控制:为了保证_version与外部版本控制的数值一致
使用version_type=external检查数据当前的version值是否小于请求的version值
oracle如何控制版本的:是根据时间戳
4.erlasticsearch 底层采用的是倒排索引进行分词,这样查询的比较快。
5.除了用kibana进行查询外,我们可以用elasticsearch提供的restful接口进行查询,我们在浏览其中输入相应的url就可以查看到对应的文档
ip+端口+索引+类型+id
6.倒排索引
倒排索引,首先对文档进行分词,然后使用分词,来对文档进行定位
常用的分词器插件有ik,我们中文用ik_smart效果更加,因为ik将每一个中文都进行了分词
7. es的一些常用命令
PUT 和POST 的区别,用PUT /索引/类型 会报错,因为没有id,用POST/索引/类型 正常,es 会帮我们自动生成id
GET /索引/类型/_search 会查询该类型 下的所有文档
我们的文档有 这几个字段name,age,sex ,car
查询指定几个id的文档
查询某个字段满足一定条件的文档
查询30岁到60之间的
查询30岁到60岁之间并排序,TO要大写
es中查询有两种方式:一种是简易的查询,一种使用json完整的请求体叫做结构化查询(dsl),dsl更直观,大家都使用这种方式,dsl查询时post过去一个json,由于post请求时json格式的,所以存在很多灵活性
term是精确查询
term和match的区别,term是精确查询,match会进行分词查询,例如奥迪a6l,会将奥迪和a61进行分词
查询数据,from 和size,类似于limit
使用过滤器filter对数据进行过滤
GET /mymayikt/user/_search
{
"query": {
"bool": {
"must": [{
"match_all": {} #match_all表示查询所有的
}],
"filter": { #查询21 至51的
"range": {
"age": {
"gt": 21,
"lte": 51
}
}
}
}
},
"from": 0,
"size": 10,
"_source": ["name", "age"] #_source 表示的查询出来的数据展示什么字段
}
8,es中文分词器:es默认的分词器是英文的,对中文不友好,使用中文分词器一定要和对应的版本对应
要放到es的plugin下面即可,安装好分词器,我们需要重启es
查询时我们将标准的分词器改为ik_smart即可
下面这个是用的默认分词器
9,我们可以自定义一些热词(假设es中已经按转了ik选择器)
我们进入到es的plugin文件夹下,然后进入到ik的config下面
#创建一个热词文档
vim custom/new_word.dic
#在文档中数据
老铁
王者荣耀
洪荒之力
一带一路
马云粑粑
吃屎吧你
然后我们需要将我们需要的编辑
加到我们的目录中后重启es,就可以搜索到我们的热词
10.文档映射
我们怎么去查映射,我们首先要到对应的索引下去查看映射关系
String类型里面:string类型分为text和keyword,其中text类型的会进行分词,keyword不会进行分词
es高可用集群环境搭建
es为什么要集群:在单个es服务器节点上,随着业务量的发展,索引文档的文件慢慢增多,影响查询效率和磁盘存储问题,
我们可以利用es的集群,将单个索引分片到多个不同的物理机器上存储,从而实现高可用,容错性。
如何实现高并发的:
es中分片分为主分片和副分片
在副分片表示:每一个主分片对应的分片数量 ,如果已经定义好了主分片数量,索引建好是不能随便修改主分片数量,底层用的是区域算法,副分片数量是可以修改的,而且主动分片对应的副的分片 不能再同一台服务器上存储。
为了高可用:每一个主分片都会有一个副分片(即备份分片),注意的是对应的分片不放在同一台节点上。故单台服务器是没有副分片的。
es在查询时,会在主分片和备份分片中查找,es分片机制保证了,每一个节点都可以包含所有的数据(即备份分片+主分片),但是核心只有主分片。
es水平扩展节点增加分片:
利用取余算法,下面的routing就是document的id
es集群搭建 :首先要将集群名称一致,然后改每一个节的node-name,然后修改network.host:ip
我们在浏览器中查看有多少台节点
删除es中的数据,我们需要进入到data目录下,然后删除nodes下面的数据