玖叶教程网

前端编程开发入门

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)

  • mysql一个数据库有多个表,es的一个索引也有多个类型type
  • mysql一个表会有多行,es一个type会有多个文档document
  • mysql的Schema指定表名、表字段是否加你了索引等,而es的mapping会指定type的处理规则是否分词及分词规则等。
  • mysql的索引需要手动创建,而es的所有字段都是索引。
  • 语法格式

    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": "朋",
     }
     }
     }
    }
    
    

    发表评论:

    控制面板
    您好,欢迎到访网站!
      查看权限
    网站分类
    最新留言