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

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 等方案。希望本文能为你在选型与落地实践中提供有价值的参考。

http://www.xdnf.cn/news/3139.html

相关文章:

  • uniapp 实现低功耗蓝牙连接并读写数据实战指南
  • 2025年“深圳杯”数学建模挑战赛C题-分布式能源接入配电网的风险分析
  • a-upload组件实现文件的上传——.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt
  • Electron Forge【实战】带图片的 AI 聊天
  • 罗技K580蓝牙键盘连接mac pro
  • C# 面向对象实例演示
  • 开源项目实战学习之YOLO11:ultralytics-cfg-models-fastsam(九)
  • Mysql主从复制到分库分表再到读写分离
  • 详解操作系统是如何管理计算机软硬件资源的,以及Linux中进程状态的观察与解释
  • 串口驱动打印下载官网
  • AimRT 从零到一:官方示例精讲 —— 二、HelloWorld示例.md
  • OpenCV-Python (官方)中文教程(部分一)_Day18
  • UVA1537 Picnic Planning
  • transform-实现Encoder 编码器模块
  • NFS-网络文件系统
  • 【codeforces 2086d】背包+组合数学
  • Java之BigDecimal
  • 杭电oj(1015、1016、1072、1075)题解
  • 在线文章系统自动化测试报告
  • MIT6.S081-lab7前置
  • 免费超好用的电脑操控局域网内的手机(多台,无线)
  • Leetcode 3530. Maximum Profit from Valid Topological Order in DAG
  • CSS:编写位置分类及优先级
  • 从Markdown到专业文档:如何用Python打造高效格式转换工具
  • Qwen3-8B安装与体验-速度很快!
  • Yaml文件
  • 数字逻辑--期末大复习
  • 激光雷达点云去畸变
  • ctf.show 卷王杯 pwn签到
  • DDI0487--A1.7