ElasticSearch与mysql
ElasticSearch中的写需要一秒鈡进行索引。也就是说,当你对index进行update的时候,需要0.5秒到一秒钟后才能看到你的修改。

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