`
waitgod
  • 浏览: 18806 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

把Elasticsearch当数据库使:表结构定义

阅读更多

Elaticsearch 有非常好的查询性能,以及非常强大的查询语法。在一定场合下可以替代RDBMS做为OLAP的用途。但是其官方查询语法并不是SQL,而是一种Elasticsearch独创的DSL。主要是两个方面的DSL:

这两个DSL说实话是不好学习和理解的,而且即便掌握了写起来也是比较繁琐的,但是功能却非常强大。本系列文章是为了两个目的:

  • 通过类比SQL的概念,实验并学习Elasticsearch聚合DSL的语法和语义

  • 用 python 实现一个翻译器,能够使用 SQL 来完成 Elasticsearch 聚合DSL一样的功能。这个小脚本可以在日常工作中做为一件方便的利器

基础Elasticsearch知识(比如什么是文档,什么是索引)这里就不赘述了。我们的重点是学习其查询和聚合的语法。在本章中,我们先来准备好样本数据。选择的样本数据是全美的股票列表(http://www.nasdaq.com/screening/company-list.aspx)。选择这份数据的原因是因为其维度比较丰富(ipo年份,版块,交易所等),而且有数字字段用于聚合(最近报价,总市值)。数据下载为csv格式(https://github.com/taowen/es-monitor/tree/master/sample),并且有一个导入脚本(https://github.com/taowen/es-monitor/blob/master/sample/symbol.py

下面是导入Elasticsearch的mapping(相当于关系型数据库的表结构定义):

{
    "symbol": {
        "properties": {
            "sector": {
                "index": "not_analyzed", 
                "type": "string"
            }, 
            "market_cap": {
                "index": "not_analyzed", 
                "type": "long"
            }, 
            "name": {
                "index": "analyzed", 
                "type": "string"
            }, 
            "ipo_year": {
                "index": "not_analyzed", 
                "type": "integer"
            }, 
            "exchange": {
                "index": "not_analyzed", 
                "type": "string"
            }, 
            "symbol": {
                "index": "not_analyzed", 
                "type": "string"
            }, 
            "last_sale": {
                "index": "not_analyzed", 
                "type": "long"
            }, 
            "industry": {
                "index": "not_analyzed", 
                "type": "string"
            }
        }, 
        "_source": {
            "enabled": true
        }, 
        "_all": {
            "enabled": false
        }
    }
}

对于把 Elasticsearch 当作数据库来使用,默认以下几个设置

  • 把所有字段设置为 not_analyzed

  • _source 打开,这样就不用零散地存储每个字段了,大部分情况下这样更高效

  • _all 关闭,因为检索都是基于 k=v 这样字段已知的查询的

执行python import-symbol.py导入完成数据之后,执行

GET http://127.0.0.1:9200/symbol/_count

返回

{"count":6714,"_shards":{"total":3,"successful":3,"failed":0}}

可以看到文档已经被导入索引了。除了导入一个股票的列表,我们还可以把历史的股价给导入到数据库中。这个数据比较大,放在了网盘上下载(https://yunpan.cn/cxRN6gLX7f9md 访问密码 571c)(http://pan.baidu.com/s/1nufbLMx 访问密码 bes2)。执行python import-quote.py 导入

 "quote": {
    "_all": {
      "enabled": false
    },
    "_source": {
      "enabled": true
    }, 
    "properties": {
      "date": {
        "format": "strict_date_optional_time||epoch_millis",
        "type": "date"
      },
      "volume": {
        "type": "long"
      },
      "symbol": {
        "index": "not_analyzed",
        "type": "string"
      },
      "high": {
        "type": "long"
      },
      "low": {
        "type": "long"
      },
      "adj_close": {
        "type": "long"
      },
      "close": {
        "type": "long"
      },
      "open": {
        "type": "long"
      }
    }
  }

从 mapping 的角度,和表结构定义是非常类似的。除了_source,_all和analyzed这几个概念,基本上没有什么差异。Elasticsearch做为数据库最大的区别是 index/mapping 的关系,以及 index 通配这些。

 

原文地址:https://segmentfault.com/a/1190000004433446

分享到:
评论

相关推荐

    elasticsearch数据结构设计文档

    Elasticsearch 数据结构设计文档是 ES 中的核心概念,用于定义索引的逻辑结构和字段设计。该设计主要包括索引类型别名、索引名称、类型名称、字段名称、字段类型、字段描述等几个方面。同时,该设计还涉及到 ES 的...

    人大金仓数据库系统表

    人大金仓数据库系统表 ...总结来说,人大金仓数据库系统的表结构提供了对数据库的全方位洞察,是数据库管理的关键。深入学习和理解这些系统表,对于提升数据库的运维能力,保障系统的稳定运行具有不可忽视的价值。

    可以自定义导出数据库的表结构(视图)的一个存储过程

    可以自定义导出数据库的表结构(视图)的一个存储过程 功能: 1.可以完整导出表结构(含主键,索引) 2.可以导出视图SQL语法 3.可以带自己定义的栏位的说明 MS SQL Server200 -2008 测试通过 导出所有表,视图(所有表是...

    索引构建秘籍:如何定义 Elasticsearch 中的映射?

    映射类似于传统关系型数据库中的表结构。合理且正确地定义映射对于实现高效的搜索和数据分析至关重要。 1. **定义数据类型**:映射规定了每个字段的数据类型,例如整数、日期、文本等。这是确保数据存储和检索符合...

    ElasticSearch学习笔记1

    文档:文档是可以被索引的基本数据单位,相当于 MySQL 数据库表中的一行记录。 分片:每个索引都有多个分片,每个分片是一个 Lucene 索引。 基本用法 ElasticSearch 以 Restful 风格命名 API,API 基本格式为: ...

    ElasticSearch搜索引擎使用说明书.docx

    * Mapping:映射关系,相当于表结构的定义。 * Cluster:集群,集群是一个或多个节点(服务器)的集合,这些节点一起保存您的全部数据,并在所有节点之间提供联合索引和搜索功能。 * Node:节点,节点是一台服务器,...

    elasticsearch-7.4.0-win64.rar

    - **索引(Index)**:类似于数据库中的表,用于存储具有相似结构的数据。 - **类型(Type)**:在6.x版本后被文档映射(Mapping)取代,用于定义索引中每个字段的数据类型。 - **文档(Document)**:索引中的最小数据...

    03-Elasticsearch大宽表应用案例实践探索 杭州 1.6 2024

    在IT领域,尤其是在大数据分析和实时检索的场景中,Elasticsearch(ES)因其高效、灵活的特性,已经成为一种广泛使用的工具。本文将深入探讨在处理大宽表应用中的实践案例,以及面临的挑战和解决方案。 首先,我们...

    ElasticSearch全部学习资料

    - **映射**: 定义了每个字段的数据类型、分词器等设置,类似关系型数据库中的表结构。 - **文档**: ElasticSearch 中最小的数据单元,以 JSON 格式存储,相当于关系型数据库中的一条记录。 - **倒排索引**: Elastic...

    Elasticsearch入门(五):Elasticsearch基础概念与基本操作 文章中所用用到的 http 文件

    3. **索引(Index)**:类似于关系数据库中的表,用于存储具有相同结构的数据。在Elasticsearch中,索引是文档的容器。 4. **类型(Type)**:在旧版本中,索引内部可以定义多个类型,但在7.0版本之后已被弃用,...

    Elasticsearch-HBase-replication同步

    1. **配置HBase**: 首先,需要在HBase中设置必要的配置,例如定义数据模型和表结构,确保它们与Elasticsearch的映射相匹配。HBase的行键(Row Key)通常对应Elasticsearch文档的ID。 2. **安装和配置Elasticsearch ...

    基于Elasticsearch Java API的参考手册

    6. **映射(Mapping)**: 定义文档字段的数据类型和结构,类似于数据库的表结构。 ### 二、Elasticsearch Java API基础操作 1. **创建客户端**: 使用`TransportClient`或`RestHighLevelClient`,前者通过TCP传输层与...

    千锋2018elasticsearch笔记修改.docx

    定义了索引中文档的结构,类似于关系型数据库中的表结构定义。可以显式定义或由Elasticsearch自动检测。 **Indexed(索引化):** 指创建文档索引的过程。默认情况下,所有字段都会被索引,但也可以根据需求选择不...

    ElasticSearch搜索引擎使用

    - **ESHead**: 一种图形化管理工具,帮助管理和监控ElasticSearch。 - **安装方法**: 对于2.4.x版本,可以直接下载并解压至`plugins`目录下。 - **访问**: 浏览器访问http://localhost:9100。 #### 四、Elastic...

    最新版windows elasticsearch-8.1.1-windows-x86_64.zip

    - **索引(Index)**:类似于数据库中的表,用于存储具有相同结构的数据。 - **文档(Document)**:索引中的最小存储单位,类似数据库中的行。 - **类型(Type)**:在Elasticsearch 7.x及以后版本中已被废弃,之前...

    elasticsearch5.3.0jdbc源码工程

    3. **类型(Type)**:在一个索引中定义文档的结构,但自 Elasticsearch 6.0 起已被废弃,所有文档都属于单个 `_doc` 类型。 4. **节点(Node)**:运行 Elasticsearch 实例的服务器,多个节点组成一个集群。 5. **...

Global site tag (gtag.js) - Google Analytics