Elasticsearch(ES)文档的CRUD
新增文档(不指定文档ID)
新增文档(不指定文档ID)新增文档(指定文档ID)
新增文档(指定文档ID)通过文档ID获取文档
通过文档ID获取文档通过文档ID更新文档
通过文档ID更新文档通过文档ID删除文档
通过文档ID删除文档批量新增文档
批量新增文档批量GET文档
批量GET文档搜索文档
由于ES的主要功能就是对海量文档进行搜索,提供了丰富的搜索接口和语法,所以单独使用一篇文章介绍ES的搜索功能。
备注:
1、指定ID生成索引文档适合从外部数据源导出数据到ES的场景,因为外部数据源中存在数据ID了,业务上可能也想保持ID不变,所以在数据进入ES的时候可以使用已经存在的ID。但是,指定ID没有让ES自动生成ID性能好,因为ID需要查看指定的ID是否已经存在。
2、Bulk写入比单条写入性能高很多。Bulk对传输的数据结构做了优化,没有使用JSONArray的形式,是因为对JSONArray进行格式化时需要额外占用和接收数据一样大的内存,而已换行来分割数据更高效,也不用占用额外的内存。
3、Bulk Request会加载到ES内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳的bulk size。一般从1000~5000条数据开始,尝试逐渐增加。另外,如果看大小的话,最好是在5~15MB之间。
4、批量GET比单条GET更高效,由于只需要一次网络请求,减少了网络开销。尽量使用批量GET。
5、由于ES底层是基于Lucene的,Lucene中没有type的概念,所以ES对索引中的每个文档维护了一个属性,属性值为文档所在的type。ES在一个索引中只维护了一个索引结构,这个结构就是该索引中所有type下属性的并集。所以,一个索引中同名属性的类型必须一样,即使在不同type下也得保持类型一样。
6、同样是由于ES底层是基于Lucene的,在Lucene中Segment一旦被生成,就不能修改。所以ES的删除和更新都不是修改原来硬盘上的数据,而是重新生成一份数据。当对Segment做合并时,会删除旧数据。