ES学习

(1)在Elasticsearch中,术语“文档”有特殊的意义,它是指 可以被序列化为包含键值对的json对象,在ES中,文档被序列化为json,并存储到ES中,制定了唯一ID。

【备注】ES中,序列化为json的键值对,其中键可以是一个字段,或字段的名称,字段的名字可以是任何合法的字符串,但不可以包含时间段;


(2)ES中单个必须的元数据:index/type/id

一个索引,应该是因共同的特性被分组到一起的文档集合;

数据可能在索引中只是松散的组合在一起,这时明确定义一些数据中的子分区是很有用的,这就是type的作用;


索引名必须小写,不能以下划线开头,不能包含逗号;

type名可以是大写或者小写,不能以下划线或句号开头,不应该包含逗号,长度不超过256个字符;


(3)Index API 和 Update API 都能部分更新索引,而ES中文档一旦建立,是不能更改的,所以其实这两个API在部分更新时,都是“检索、合并、新建”这个流程,而这两个API的区别在于,Update API是发一个请求完成上面操作,而Index API是先发送一个检索请求,再发送一个新建索引请求。所以部分更新时,最好使用Update API,这避免了多次网络请求的开销,而且由于Update API是在ES内部完成了检索和新建的过程,所以检索和新建的时间间隔比Index API的要短,间隔短,就能更好的避免文档已被另一个请求修改的冲突。

【Update API常用设置】

更新失败时的重试次数,默认0次,可以通过retry_on_conflict设置;

更新文档时,文档可能还不存在,这是可以设置upsert 参数,表明如果文档不存在,则新建;


(4)ES中version是用来解决冲突问题的,因为ES是异步和并发的,多个请求到来时,可能乱序,导致老的更改覆盖新的更改,我们的get和delete请求,也可以指定版本号,这个指定的版本号,是指我们要修改的文档当前的版本号,而不是我们要设置文档为这个版本号,如果版本号与文档当前版本号不相等,则请求失败。请求中带版本号,通常是为了达到乐观锁的目的,就是我们要修改的是这个版本的文档,如果文档已被修改,导致当前版本不是我们想要修改的版本,我们就不修改。


(5)get请求,如果没有找到文档,返回的状态码也是200,因为get请求被正确执行完成了,所以对于get请求,我们应该检查found字段(found为false表示没找到)- 未验证


search请求请用设置

搜索是很快的,但是如果一个请求的响应时间比搜索结果更重要,那么可以设置请求响应时间,ES会在请求响应时间前,将截止到当前为止,查找到的结果返回给客户端,这里返回的结果可能不完整,还有就是,timeout不是停止执行查询,它只是告知节点返回目前为止的搜索结果,并关闭连接,但是后台的搜索会继续执行,即使请求结果已返回;

搜索时,如果不指定index和type,会检索集群中的所有文档;可以指定一个或多个或全部索引,也可以通过表达式指定索引,满足表达式的索引都会被搜索

搜索结果很多,这时候需要分页,可以通过size 和from 参数配置,size默认10,from默认0;





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值