1.NRT, 近实时,从写入数据到数据尅一被检索到有1秒的delay,基于es的查询可以达到毫秒级
2.Es的删除不是物理删除,只是标记成delelted 物理上没删除,当数据越来越多的时候才会删除,貌似和HbASE一样。
3.es通过version乐观锁控制并发
4.es的external version
用法:?version=1&version_type=external 区别:
原版version,只有当你提供的version与数据中的version一模一样的时候才能进行修改,而external_version只要大于数据中的version才能进行修改,
5、es可以利用groovy脚本
例子:
PUT /test_index/test_type/11
{
"num" : 0,
"tags" : []
}
需求:将num值进行+=1操作
POST /test_index/test_type/11/_update
{
"script": "ctx._source.num += 1"
}
查询结果:
{
"_index": "test_index",
"_type": "test_type",
"_id": "11",
"_version": 2,
"found": true,
"_source": {
"num": 1,
"tags": []
}
}
具体后续会单独起一章写
关键词 | 作用 | 例子 | 其他 |
_source | 定制元数据 | { "_source":["name"] }或者 get class/student/_search?_source=name 只返回name |
|
test_index/test_type/1/_update |
partial update | put /test_index/test_type/1 只更改了female,如果使用 put /test_index/test_type/1 则数据就会变成只有一个sex属性 | 不需要进行全量更新,不仅可以减少写的元素,同时因为发生变化都在shard中,所以速度比全量更新要快
|
retry_on_conflict | 在出现version发生并发冲突的时候会重试 | post test_index/test_type/1/_update?retry_on_conflict=5 { "doc":{ "sex":"female" } } | |
_bulk | 批量插入 | | 1.可以节省网络通信 2.其中一条失败不影响其他 3.如果bulk size过大,性能反而会下降 4.json每个字段不能分行 |
_mget | 批量获取 | ||
timeout | 规定必须返回时间 | get class/student/_search?timeout=10ms | 假设搜索1000条数据需要100ms,那么指定了这个参数就会只搜索出100条数据就返回。如果不指定,默认就会一直等待100ms,直到搜索出1000条数据 |
/*/*/id | 通配符搜索 | get class/st*/_search | class 索引下以st开头的type数据 |
/_analyze | 测试分词器 | get /_analyze { "analyzer":"standard", "text":"Text to Month" } | 对于不同的value类型,分词器不是同的 |