(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;