ElasticSearch中的写需要一秒鈡进行索引。也就是说,当你对index进行update的时候,需要0.5秒到一秒钟后才能看到你的修改。 es的分页,性能很差,因为如果你要查100页的10条内容,那么如果你有5个shard,每个shard都会查询出1000条数据给到协调节点,然后由协调节点根据需求进行排序,筛选等操作,所以翻得页数越深,性能就会越差. 所以使用es不允许深度分页. 如果是类似于微博中的下拉刷出来的一页一页,或者微信朋友圈下拉分页,可以使用scroll来进行处理,实际上scroll就是一次性生成所有数据的快照,然后根据每次翻页的游标获取下一页下一页.性能无论翻多少页都是毫秒级. Mysql与ES的重要概念类比 ES Mysql Index 数据库 Type 数据表 Document 行 Mapping Schema 全文都是索引 索引 ??mysql的数据库相当于Es的索引(Index) delete from wk_single_customer where id=21 update wk_single_customer set referrerId= 15204,referrername='李四' where id=4104 select * from wk_single_customer select * from wk_single_customer where name = '张三' select * from wk_single_customer where name like %朋%es分页性能优化
es与mysql对比
语法格式
match分词匹配满足一个即返回
term 精准搜索
range 范围查询 gt/lt:大于/小于 gte/lte:大于等于/小于等于
bool多条件复合查询
sort 排序
terms 相当于 mysql中的in
wildcard 模糊匹配 mysql中的like
sum avg max min 函数操作
操作案例
1删除操作delete(删除id为21的数据)
POST wk_single_customer/_delete_by_query {
"query":{
"term":{
"id":21
}
}
}
2修改操作update(将id=4104的referrerId修改为15204,referrername修改为李四)
POST wk_single_customer/_update_by_query
{
"script": {
"source": "ctx._source['referrerId']='15204'; ctx._source['referrername']='李四';"
},
"query": {
"bool": {
"must": [
{
"term": {
"customerId": "4104"
}
}
]
}
}
}
3查询所有
GET /wk_single_customer/_search
GET /wk_single_customer/_search{
"query": {
"match_all": {}
}
}
4等值查询
GET /wk_single_customer/_search{
"query": {
"term": {
"name": "张三"
}
}
}
5模糊匹配,相当于MySQL中的like(查询姓名中带有’朋‘的)
GET /wk_single_customer/_search
{
"query": {
"wildcard": {
"detail": {
"name": "朋",
}
}
}
}