当前位置: 首页 > news >正文

Elasticsearch--自带“搜索引擎“的数据库

一、核心原理

1. 倒排索引(Inverted Index)

  • 基本概念
    将文档中的每个词条(term)映射到包含它的文档列表上,正如图书馆目录将关键词映射到书籍编号。
  • 工作流程
    • 分词(Analysis):文本切分成最小单元(token),可配置多种分词器(标准、IK、英文 Porter 等)。
    • 归一化:对 token 执行小写化、去停用词等处理。
    • 构建倒排表:为每个 token 维护一张 posting list,记录它出现在哪些文档、哪些位置。

2. 文档存储与索引

  • JSON 文档
    Elasticsearch 以 JSON 格式存储每个记录(document),字段无需预定义即可动态添加,体现了高度的灵活性。
  • Mapping
    用户可显式地为字段定义类型(textkeyworddateinteger 等)、分词器及索引选项,实现对索引行为的精细控制。

3. 集群架构

  • 节点(Node)与集群(Cluster)
    多台机器(或容器)运行 Elasticsearch,组成一个集群,通过协调节点(master)管理全局元数据。
  • 分片(Shard)和副本(Replica)
    • 主分片:将一个索引水平拆分为 N 个主分片,每个分片本质上就是一个独立的 Lucene 索引。
    • 副本分片:为每个主分片配置 M 个副本,用于高可用和读扩展。
    • 数据路由:文档根据 _id 哈希分配到某个主分片,然后副本同步该数据。

4. 查询与打分

  • 查询 DSL
    JSON 格式的 Query DSL,支持 matchtermboolrangeaggregations 等丰富查询。
  • 相关性评分(TF-IDF / BM25)
    基于词频-逆文档频率(TF-IDF)和文档长度归一化技术(BM25),按相关度对结果进行排序。

5. 聚合(Aggregations)

  • 桶聚合(Bucketing):如 terms(按字段分组)、histogram(按数值区间分组)等。
  • 指标聚合(Metric):如 avgsumminmaxstats 等,可在桶内或全局计算统计指标。

二、典型使用模式

1. 部署与启动

  • 单节点开发(Docker):
    docker run -d --name es -p 9200:9200 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:8.6.0
    
  • 生产多节点:通过 discovery.seed_hostscluster.initial_master_nodes 等配置,组建多节点集群。

2. 建立索引与 Mapping

curl -X PUT "localhost:9200/my_index" -H 'Content-Type: application/json' -d'
{"mappings": {"properties": {"title":   { "type": "text", "analyzer": "standard" },"tags":    { "type": "keyword" },"created": { "type": "date" }}}
}'

3. 文档操作

  • 插入
    curl -X POST "localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json' -d'
    { "title":"Elasticsearch入门", "tags":["搜索","日志"], "created":"2025-04-01" }
    '
    
  • 更新
    curl -X POST "localhost:9200/my_index/_update/1" -H 'Content-Type: application/json' -d'
    { "doc": { "title":"深入理解 Elasticsearch" } }
    '
    
  • 删除
    curl -X DELETE "localhost:9200/my_index/_doc/1"
    

4. 查询与聚合

  • 全文检索
    curl -X GET "localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
    {"query": {"match": { "title": "Elasticsearch" }}
    }
    '
    
  • 聚合示例:按日期分桶并统计文档数
    curl -X GET "localhost:9200/my_index/_search?size=0" -H 'Content-Type: application/json' -d'
    {"aggs": {"by_month": {"date_histogram": {"field": "created","calendar_interval": "month"}}}
    }
    '
    

5. 监控与运维

  • Kibana:Elasticsearch 的官方 Web UI,提供管理界面、Dev Tools、可视化仪表盘。
  • Beats & Logstash:数据采集与管道工具,常用于日志、指标、网络数据的采集与预处理。
  • X-Pack:安全、监控、报警等商业插件(部分功能现已开源到 Basic 版)。

三、与同类产品对比

特性ElasticsearchApache SolrOpenSearchAlgolia
底层引擎LuceneLuceneLucene自研引擎
部署方式单节点/集群单节点/集群单节点/集群云托管
配置管理REST APIXML + REST API与 ES 几乎兼容Dashboard + API
安全认证X-Pack 安全Kerberos、JWT 支持内置安全(原 ES X-Pack)API Key 管理
查询DSLJSONJSON、Solr Query DSLJSON (兼容 ES DSL)简化 API
向量检索支持(dense/sparse)需插件支持支持
社区与生态强大、商业版历史悠久、社区活跃AWS 赞助、社区发展中SaaS 化,低运维成本
  • Solr vs ES
    • Solr 配置更偏向 XML,启动依赖 ZooKeeper;ES 原生 REST 化、自动分片、易于水平扩展更适合云原生。
  • OpenSearch vs ES
    • OpenSearch 是 AWS 从 ES 7.10 分叉后维护的开源版本,与 ES 绝大多数 API 兼容,适合 AWS 用户。
  • Algolia vs ES
    • Algolia 是纯 SaaS 全文检索服务,零运维、延迟极低,但对大规模自由查询或自定义聚合能力不如 ES 灵活。

四、优势总结

  1. 高度可扩展:自动分片与副本机制,轻松实现从单节点到千节点扩容。
  2. 丰富查询能力:支持全文检索、精确匹配、布尔组合、多字段、多语言分词、多种聚合。
  3. 实时性:近实时(NRT)架构,文档写入后秒级可查询。
  4. 生态完善:Kibana、Beats、Logstash、Elastic APM 等生态工具,覆盖数据采集、监控、可视化全链路。
  5. 混合场景支持:除了日志与搜索,还可做实时指标分析、向量搜索、SIEM 安全事件管理等。

结语

通过对 Elasticsearch 原理、使用方式和同类对比的深入剖析,可以看到它在全文检索与实时分析领域的强大之处。但在低资源环境或纯云 SaaS 场景下,也可根据需求灵活选择 Solr、OpenSearch 或 Algolia 等方案。希望本文能为你在选型与落地实践中提供有价值的参考。

相关文章:

  • 软考中级-软件设计师 操作系统(手写笔记)
  • 基础术语说明
  • 负载均衡技术全景指南:架构、算法与发展趋势
  • Qwen3 模型架构和能力概览
  • Compose笔记(二十)--TextField
  • MCP协议:自然语言与结构化数据的双向桥梁 ——基于JSON-RPC 2.0的标准化实践
  • 遗传算法(Genetic Algorithm,GA)
  • 健康管理系统操作界面解析:从建档到干预方案生成的极简逻辑
  • Vulkan 学习(16)---- 使用 VertexBuffer
  • Windows系统安装Docker(Win10系统升级,然后安装)
  • 区块链:跨链协的技术突破与产业重构
  • ASP.NET MVC​ 入门与提高指南六
  • 强化学习_Paper_2017_Curiosity-driven Exploration by Self-supervised Prediction
  • 树状结构转换工具类
  • 如何解决服务器文件丢失或损坏的问题
  • 大型连锁酒店集团数据仓库应用示例
  • [STM32] 4-2 USART与串口通信(2)
  • 从零构建 MCP Server 与 Client:打造你的第一个 AI 工具集成应用
  • 【AI提示词】二八法则专家
  • (31)VTK C++开发示例 ---绘制立方体
  • “五一”假期首日国铁郑州局迎大客流,预计发送旅客逾95万人次
  • 神十九都带回了哪些实验样品?果蝇等生命类样品已交付科学家
  • 中央网信办部署开展“清朗·整治AI技术滥用”专项行动
  • 神舟十九号载人飞行任务取得圆满成功
  • 辽宁辽阳市白塔区一饭店发生火灾,当地已启动应急响应机制
  • “ChatGPT严选”横空出世了,“DeepSeek严选”还要等多久?