Elastic Stack梳理: ElasticSearch分页与遍历技术深度解析与工程实践

ElasticSearch原理+实战知识点 今天为大家带来流计算领域经常使用的组件 ElasticSearch,本文通过原理+实战操 教程带领大家快速学会 ElasticSearch 搜索引擎,以下内容全部经过实战操作,可 以根据文档进行学习~ 大纲如下: 1 ElasticSearch 概述 1.1 全文搜索引擎 小伙伴们经常使用 google 或者百度进行搜索内容,在输入框中输入关键字,这个时候,网站会将包含 关键字 的所有网页返回,大家有没有想过,为什么输入关键字就可以查到结果呢? 同时网站上返回的页面内容大多都是一些 非结构化 的文本数据, 阅读详情

背景:分布式环境下的分页挑战

ElasticSearch(ES)作为分布式搜索引擎,其分页机制面临核心挑战:深度分页性能瓶颈,在分布式架构中,数据被分割到多个分片(Shard),协调节点(Coordinating Node)需聚合结果,传统分页方案在处理深层数据时引发资源消耗指数级增长,影响集群稳定性

本解析聚焦三大方案:From-Size(基础分页)、Scroll(快照遍历)、Search_After(实时游标),结合工程实践提供全场景解决方案

分页方案原理与技术实现


1 ) From-Size 分页方案

原理

通过 from(起始位置)和 size(每页数量)参数实现跳页,例如获取第2页数据(每页10条):

GET /products/_search  
{  
  "from": 10,  
  "size": 10,  
  "query": { "match": { "name": "laptop" } }  
}  

2 )深度分页问题

  • 性能瓶颈:当请求第990-1000条数据(from=990, size=10)时,5个分片各返回1000条数据,协调节点需排序5000条记录后返回10条。
  • 资源消耗:处理数据量公式为 (from + size) × 分片数,页数越深消耗越大。
  • ES限制:默认 index.max_result_window=10000,超限报错:
    { "error": "Result window is too large, from + size must be <= 10000" }  
    

优化方案

  • 业务层限制最大页数(如≤100页)。
  • 禁用精确总数计算以提升性能:
    { "track_total_hits": false }  
    

要点

  • ✅ 优势:支持实时搜索与自由跳页。
  • ⚠️ 局限:深度分页引发性能灾难,仅适用浅层数据(<10,000条)。
  • 🔧 配置建议:调整 index.max_result_window 需谨慎,优先业务层管控。

Scroll 遍历方案


原理

基于数据快照(Snapshot)遍历全量文档,非实时(新写入数据不可见)。

工作流程

1 ) 创建快照(有效期5分钟):

POST /logs/_search?scroll=5m  
{  
  "size": 100,  
  "query": { "range": { "@timestamp": { "gte": "now-1d" } } }  
}  
# 返回 Scroll ID: "DXF1ZXJ5QW..."  

2 ) 迭代获取数据:

POST /_search/scroll  
{  
  "scroll": "5m",  
  "scroll_id": "DXF1ZXJ5QW..."  
}  

3 )终止与清理:

  • 当 hits.hits 为空时停止。
  • 手动释放资源:
    DELETE /_search/scroll { "scroll_id": "DXF1ZXJ5QW..." }  
    

缺陷与注意事项

  • ❌ 非实时性:快照创建后新增/删除文档不影响结果。
  • ⚠️ 资源泄漏风险:未清理的Scroll ID占用堆内存。
  • 🔒 排序限制:仅支持 _doc 排序(无评分)。

要点

  • ✅ 优势:全量数据遍历无深度分页问题
  • ⚠️ 局限:非实时、仅顺序访问、需手动资源管理
  • 🔧 配置建议:集群级限制并发快照数:
     PUT /_cluster/settings  
     { "persistent": { "search.max_open_scroll_context": 500 } }  
    

Search_After 实时遍历方案


1 ) 原理

利用上一页末位的排序值(Sort Value)定位下一页,避免全局排序

关键步骤

  1. 首次查询(指定唯一排序组合):
    GET /logs/_search  
    {  
      "size": 50,  
      "sort": [  
        { "@timestamp": "desc" },  
        { "_id": "asc" }  // 确保唯一性  
      ],  
      "query": { "match": { "level": "error" } }  
    }  
    # 返回末位排序值:["2023-10-01T12:00:00", "abcd1234"]  
    
  2. 获取下一页:
    GET /logs/_search  
    {  
      "size": 50,  
      "sort": [ ... ],  // 同首次排序  
      "search_after": ["2023-10-01T12:00:00", "abcd1234"]  
    }  
    

性能优势

  • 每次仅从各分片获取 size 条数据(如5分片+size=10 → 50条)
  • 支持实时数据检索(新文档可见)

局限性

  • ➡️ 仅顺序翻页:无法跳转任意页码。

要点

  • ✅ 优势:高性能、实时性、无深度分页问题。
  • ⚠️ 局限:依赖唯一排序值(需组合字段如 timestamp + _id)。
  • 🔧 配置建议:
    • 索引设计:排序字段启用 doc_values: true。
    • 刷新策略:降低 refresh_interval 提升写入吞吐。

案例:基于NestJS的工程实现


1 ) 场景1:电商列表分页(From-Size)

import { Injectable } from '@nestjs/common';  
import { ElasticsearchService } from '@nestjs/elasticsearch';  
 
@Injectable()  
export class ProductService {  
  constructor(private readonly esService: ElasticsearchService) {}  
 
  async searchProducts(keyword: string, page: number, size: number) {  
    const from = (page - 1) * size;  
    const { body } = await this.esService.search({  
      index: 'products',  
      body: {  
        from,  
        size,  
        query: { match: { name: keyword } },  
        ...(from + size > 10000 && { track_total_hits: false })  
      }  
    });  
    return {  
      items: body.hits.hits.map(hit => hit._source),  
      total: body.hits.total.value  
    };  
  }  
}  

ES配置优化:

PUT /products/_settings  
{  
  "index.max_result_window": 10000,  // 深度分页阈值  
  "index.auto_expand_replicas": "0-1" // 动态扩展副本  
}  

2 ) 场景2:数据导出(Scroll)

import { Injectable } from '@nestjs/common';  
import { ElasticsearchService } from '@nestjs/elasticsearch';  
 
@Injectable()  
export class ExportService {  
  constructor(private readonly esService: ElasticsearchService) {}  
 
  async exportAllProducts() {  
    const scrollTtl = '10m';  
    let scrollId: string;  
    const results = [];  
 
    // 初始化快照  
    const initRes = await this.esService.search({  
      index: 'products',  
      scroll: scrollTtl,  
      size: 1000,  
      body: { query: { match_all: {} } }  
    });  
    scrollId = initRes.body._scroll_id;  
    results.push(...initRes.body.hits.hits);  
 
    // 遍历全量数据  
    while (initRes.body.hits.hits.length > 0) {  
      const scrollRes = await this.esService.scroll({  
        scrollId,  
        scroll: scrollTtl  
      });  
      results.push(...scrollRes.body.hits.hits);  
    }  
 
    // 清理资源  
    await this.esService.clearScroll({ scroll_id: scrollId });  
    return results.map(hit => hit._source);  
  }  
}  

3 ) 场景3:日志实时流(Search_After)

import { Controller, Get, Query } from '@nestjs/common';  
import { ElasticsearchService } from '@nestjs/elasticsearch';  
 
@Controller('logs')  
export class LogController {  
  constructor(private readonly esService: ElasticsearchService) {}  
 
  @Get()  
  async streamLogs(  
    @Query('lastTimestamp') lastTimestamp: string,  
    @Query('lastId') lastId: string  
  ) {  
    const searchAfter = lastTimestamp && lastId ? [lastTimestamp, lastId] : null;  
    const { body } = await this.esService.search({  
      index: 'logs',  
      body: {  
        size: 100,  
        query: { range: { "@timestamp": { gte: "now-1h" } } },  
        sort: [  
          { "@timestamp": "desc" },  
          { "_id": "asc" }  
        ],  
        ...(searchAfter && { search_after: searchAfter })  
      }  
    });  
 
    const lastHit = body.hits.hits[body.hits.hits.length - 1];  
    return {  
      logs: body.hits.hits.map(hit => hit._source),  
      nextCursor: lastHit ? `${lastHit.sort[0]},${lastHit.sort[1]}` : null  
    };  
  }  
}  

索引设计优化:

PUT /logs  
{  
  "settings": {  
    "number_of_shards": 3,  
    "refresh_interval": "5s"  // 平衡实时性与写入性能  
  },  
  "mappings": {  
    "properties": {  
      "@timestamp": { "type": "date" },  
      "message": { "type": "text" }  
    }  
  }  
}  

方案对比与选型指南


性能与特性对比

方案实时性跳页支持深度分页支持内存开销适用场景
From-Size✅✅❌ (≤1万条)高商品列表前几页
Scroll❌❌✅中全量数据导出、离线分析
Search_After✅❌ (仅顺序)✅低实时日志流、无限滚动

关键选型因素

  1. 实时性需求:
    • 实时场景排除 Scroll(快照隔离数据)。
  2. 数据规模:
    • 10,000条优先 Search_After 或 Scroll。

  3. 访问模式:
    • 需跳页 → From-Size(浅层数据)。
    • 顺序遍历 → Search_After(实时)或 Scroll(离线)。

最佳实践

  1. 索引设计:
    • 分片大小控制在 20-40GB,避免过多分片加剧分页负载。
    • 高频排序字段使用 keyword 类型(禁用分词)。
  2. 资源监控:
    • 定期清理过期 Scroll ID:DELETE /_search/scroll/_all。
    • 启用查询性能分析:{ "profile": true }。
  3. 工程兜底:
    • From-Size 超限时自动降级(如返回错误或切 Search_After)。
    • 组合排序字段确保 Search_After 唯一性(如 timestamp + _id)。

性能趋势总结:

  • Search_After 在实时流场景性能最优(O(1) 复杂度)
  • Scroll 适用于大数据离线处理
  • From-Size 需严格限制使用范围

官方文档核心入口


  1. Search API:
    • 参数:q(查询字符串)、df(默认字段)、analyzer(分词器)。
    • 请求体:from/size, scroll, search_after, _source(字段过滤)。
  2. Query DSL:
    • 全文检索:match, match_phrase, multi_match。
    • 精确查询:term, range, exists。
    • 复合查询:bool(must/should/filter), function_score。
  3. 性能工具:
    • profile: true:分析查询各阶段耗时。
    • explain: true:查看相关性评分细节。

文档路径:ElasticSearch Search API | Query DSL

ElasticSearch特点|B+Tree|lucene倒排索引结构|lucene与elasticsearch的关系|基本概念 ElasticSearch特点 1. 天然分片,天然集群: es 把数据分成多个shard,下图中的P0-P2,多个shard可以组成一份完整的数据,这些shard可以分布在集群中的各个机器节点中。随着数据的不断增加,集群可以增加多个分片,把多个分片放到多个机子上,已达到负载均衡,横向扩展。 这种集群分片的机制造就了elasticsearch强大的数据容量及运算扩展性。 在实际运算过程中,每个查询任务提交到某一个节点,该节点必须负责将数据进行整理汇聚,再返回给客户端,也就是一个简单的节点上进行Map计算, 阅读详情

相关推荐

深入理解Elasticsearch

1.3.1、索引(Index)(数据库)是一个包含了相关文档数据的集合,存数据的地方。索引可以包含多个类型(Type),每个类型代表一个类似数据库中的表。每个索引都有一个对应的Mapping。主要用于定义文档中的字段类型和属性,以及 索引文档时自动检测字段类型并创建Mapping。

RuiKe的博客 5701

ElasticSearch详解

在 flush 过程中,内存中的缓冲将被清除,内容被写入一个新的 Segment,Segment 的 fsync 将创建一个新的提交点( Commit Point),并将内容刷新到磁盘,旧的translog将被删除并开始一个新的translog,flush 触发的时机是定时触发(默认30分钟)或者 translog 变得太大(默认512M)时。取决于你的文档的大小,分片的数量和你使用的硬件,给 10,000 到 50,000 的结果文档深分页( 1,000 到 5,000 页)是完全可行的。

7B_Geek的博客 3万+

Web攻击日志分析实战:从SQL注入到暴力破解的深度解读

Web服务器日志是网络安全领域的基础数据源,记录了所有客户端与服务器之间的交互信息。其核心原理在于HTTP协议的标准通信过程,每一次请求和响应都会被结构化记录,形成包含IP、时间、方法、URI、状态码等关键字段的日志条目。这些日志的技术价值在于,它们如同系统的“黑匣子”,能够客观还原攻击者的行为轨迹,是事后溯源和实时威胁检测的基石。在应用场景上,无论是SQL注入、XSS跨站脚本、目录遍历还是暴力破解攻击,都会在日志中留下独特的模式特征。例如,通过分析请求URI中的特殊字符和状态码的异常组合,可以快速识别SQ

weixin_34239169的博客 332

Elasticsearch 简介

Elasticsearch是一个非常强大的搜索引擎。它目前被广泛地使用于各个IT公司。Elasticsearch是由Elastic公司创建并开源维护的。它的开源代码位于https://github.com/elastic/elasticsearch。同时,Elastic公司也拥有Logstash及Kibana开源项目。这个三个开源项目组合在一起,就形成了 ELK软件栈。他们三个共同形成了一个强大的...

Elastic 中国社区官方博客 17万+

云钓鱼攻击防御实战:从多阶段攻击链到纵深防御体系

网络钓鱼攻击正从传统手法向利用云基础设施的高级形态演进。其核心原理在于攻击者滥用云服务的信誉、弹性和丰富功能,构建出难以被传统规则拦截的攻击链。这种多阶段攻击的技术价值在于能够绕过双因素认证,直接窃取会话凭证,对企业安全构成严重威胁。典型的应用场景包括利用云存储托管钓鱼页面、通过反向代理实施会话劫持,并最终横向移动入侵核心系统。为应对此类威胁,需要构建覆盖邮件网关、网络流量分析、终端检测及云原生安全的协同防御机制,其中邮件安全网关的“时间炸弹”功能和SIEM中的多阶段攻击关联规则是关键的检测手段。通过实施最

weixin_33725807的博客 379

2025云安全威胁白皮书:从漏洞进化到主动防御体系构建

在云原生与微服务架构普及的今天,云安全已成为企业数字化转型的核心挑战。传统的安全边界逐渐模糊,攻击面从单一服务器扩展到复杂的配置、API及供应链环节。其核心原理在于,攻击者正从利用单一高危漏洞转向构建复杂的漏洞利用链,并频繁利用配置错误、未授权访问及信息泄露等中低危弱点进行组合攻击,实现从初始入侵到横向移动的完整突破。这凸显了仅依赖漏洞扫描与补丁管理的传统模式已不足以应对现代威胁。从技术价值看,构建主动防御体系需融合安全左移与运行时监控,将安全能力嵌入开发运维全生命周期。典型应用场景包括:通过SAST/SC

weixin_34242331的博客 387

Elastic:开发者上手指南

你们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。 我们可以按照如下的步骤来学习: 1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍 2)Elasticsearch中的一些重要概念:cluster,n..........................................................

Elastic 中国社区官方博客 17万+

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 412

Elastic Stack梳理:正排索引与倒排索引深度解析及Elasticsearch工程实践指南

搜索引擎索引机制通过正排索引(文档ID→内容)和倒排索引(关键词→文档ID)协同工作,实现高效检索。正排索引类似书籍目录,倒排索引类似索引页,两者配合将查询复杂度从O(n)降至O(log n)。Elasticsearch采用字段级索引,每个字段独立构建倒排索引,支持精准查询。工程实践中,NestJS集成Elasticsearch需要配置集群环境、创建索引(含分词设置)、实现批量写入和高级查询(如短语搜索与高亮)。生产环境需优化参数(如refresh_interval、缓存设置)并实施安全加固(启用SSL)。

Wang的专栏 2387

【信息科学与工程学】计算机科学与自动化 第二百零一十一 软件开发模型01

编号类型模型领域模型中的知识点/因素/参数关联知识和法律法规1传统顺序模型瀑布模型 (Waterfall)通用软件开发、硬件紧密耦合系统、政府/军工项目、需求稳定的传统信息系统严格线性阶段:可行性研究→需求分析(SRS,含功能/非功能/接口/约束,使用IEEE 830模板)→系统设计(概要设计HLD:架构、模块划分、数据库ER图;详细设计LLD:伪代码、类图、接口定义)→实现(编码规范、代码审查、静态分析工具SonarQube)→测试(单元测试JUnit、集成测试、系统测试、验收测试UAT,测试计划提前编写

weixin_49199313的博客 167

【信息科学与工程学】【安全领域】第二百零五篇 漏洞治理 01

形式:RabbitMQ管理插件SSRF CVE-2026-57211(CVSSv4 8.3,Windows多插件可诱发SMB NTLM泄露)、管理API资源无限CWE-770 CVSSv4 5.3、管理UI存储XSS CVE-2026-57214/其他;用法:GET /cgi-bin/.%2e/%2e%2e/etc/passwd→读密文/源码→RCE。定量:CVSS 9.0;例:Spectre CVE-2017-5753、Meltdown CVE-2017-5754(CPU越界/未授权内核读);

weixin_49199313的博客 115

zyfun 跨平台视频播放器:影视直播历史记录指南

zyfun 是一款免费的跨平台视频播放器,把影视聚合搜索、IPTV 直播、多引擎播放与本地历史记录放进同一个桌面应用,减少在网页、网盘与专用播放器之间来回切换的成本。它同时支持 Windows、macOS 与 Linux,基于 Electron 开发,界面用 Vue 3 加 TypeScript 编写,数据存在本机 libSQL(一种与 SQLite 兼容的嵌入式数据库)里,打开即用,不需要云端账

gitblog_00418的博客 685

【 ‌infrastructure】【数据中心】【AI infra】第十篇 智能计算数据中心解决方案集成测试和交付知识体系01

编号类型领域模块子模块学科知识点及详细数学建模与数值设计(推导/边界/示例)关联知识、标准、法律法规、论文、工业实践1.1架构智算集成总体拓扑业务/管理/数据/参数面分离系统架构、队列论、网络流四平面隔离:业务面带宽B_b、数据面B_d(对象/数仓ETL)、参数面B_p(NCCL AllReduce)、管理面B_m(Prometheus/API)。总成本C=Σ(N_server·C_s+N_sw·C_sw+N_dpu·C_dpu)+C_power;约束B_p≥模型梯度量G/t_step。示例:千卡A100、

weixin_49199313的博客 117

知识总结 - 常见问题

1. InnoDB存储引擎,三层B+树,单表能存储多少数据MySQl存储单元为1页,1页为16K,即16384Byte非叶子节点存储单元为主键+指针,大小为8+6=14Byte单页可存储16384/14 ≈ 1170个单元,即可存储1170个子节点每个存储单元可标记1页,则前两层可标记1170x1170页第三层叶子节点存储数据,每条数据约1K,单页则可存储16/1=16个数据三层 B+树,单表可存数据约为1170x1170x16=21902400条数据。

yuyehui的博客 834

C++坦克大战源代码

【代码】C++坦克大战源代码。

强国豪,林中霖 2612

泛微 OA - 根据流程 requestid 获取流程中的附件

在泛微 OA 流程中,附件是通过加密上传的,如果在第三方系统想要调用 OA 系统获取 OA 附件,暂时没有很好的方法实现。但是可以在本地进行调用,得到附件信息,拿到这些信息后,可以用过 url 地址在本地下载。

小松鼠的博客 5837

Elasticsearch(看这一篇就够了)

Elasticsearch是一个全文检索服务器全文检索是一种非结构化数据的搜索方式结构化数据:指具有固定格式固定长度的数据,如数据库中的字段。非结构化数据:指格式和长度不固定的数据,如电商网站的商品详情。结构化数据一般存入数据库,使用sql语句即可快速查询。但由于非结构化数据的数据量大且格式不固定,我们需要采用全文检索的方式进行搜索。全文检索通过建立倒排索引加快搜索效率。真实开发中我们往往需要对一段内容既进行文字分词,又进行拼音分词,此时我们需要自定义ik+pinyin分词器。创建自定义分词器。

m0_74436895的博客 2万+

3D美术14——max——fbx导入max后直接生成bip人形骨骼插件

最近经常会从unity里反八FBX到max里进行2次修改。 但是非常尴尬的事情就是,就是用max做的fbx,你在反导入回来,BIP骨骼都会变成预制体。这个时候有一个方法补救。那就是在导入的时候调整一下参数。(如下图) 把这里调整成设置为骨骼。就还可以了。 但是,如果你不是用max做的FBX。呵呵,那么你一定很头大,因为完全没有用。 所以,这个时候就要上插件了。 Autofbxtobip v.1.1 这个插件适用于2015及其以上版本。 在这之前我还用过一款叫BIPPY,但是效果相当感人,照着这个图片调整

qq_37576129的博客 1万+

Elasticsearch集群

今日授课目标 能够完成索引库的操作:新增、查询、删除 能够完成映射操作:配置映射,查看映射 能够完成文档的操作:新增、修改、删除 能完成请求体查询:基本查询、结果过滤、高亮查询,分页及排序 ES前置准备Lombok讲解 第一章 Elasticsearch集群 1.1 单点的问题 单台服务器,往往都有最大的负载能力,超过这个阈值,服务器性能就会大大降低甚至不可用。单点的elasticsearch也是一样,那单点的es服务器存在哪些可能出现的问题呢? 单台机器存储容量有限 单服务器容易出现单点故障,无法实

IT学院 1055

AI大模型学习(14)AI 小白入门!用 OpenCV+Python 打造人体姿态识别系统,超详细教程来了

这篇教程介绍了如何使用Python+OpenCV+MediaPipe搭建入门级人体姿态识别系统。主要内容包括:人体姿态识别的应用场景(如健身APP、体感游戏)、开发环境搭建(安装Python、OpenCV和MediaPipe库)、核心代码实现(通过30行代码完成摄像头姿态检测),以及进阶功能开发(深蹲动作纠正算法和PPT体感控制器)。教程详细解析了MediaPipe的BlazePose模型架构和33个关键点的生理学意义,并提供了多线程优化等性能提升方案。该项目适合AI初学者实践,无需复杂算法即可实现实时人体

isoft888的专栏,致力于C#/python分享物联网、大数据,神经网络的等领域,欢迎讨论交流! 1555

详解电路设计中的RC电路

​ 一、什么是RC电路 RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用到 的电路。 常见的RC充、放电电路、RC积分电路合RC微分电路接下来详细讲解。 二、RC充、放电电路 RC充、放电电路如下图所示,下面通过充电和放电两个过程来分析此电路。 ​RC充、放电电路图 (1)RC充电电路 RC充电电路图如下图(a)所示 RC充电电路图及充电曲线图 ​由上图分析: 将上图a中开关S置于“1”处,电源E开始通过电阻R对电容C充电,由于刚开始充电时电容两端没有..

IT xiaobai 4万+

什么是ElasticSearch?看完这一篇你就懂了

es常用操作学习教程

weixin_45081813的博客 1万+

【DAB收音机】DAB 认证介绍

DAB 认证ESTI 标准文档: ETSI 103461实际过认证时,需要根据产品的受众国家及区域,参考当地官方是否有国内认证协议。需要参考当地文档进行功能开发。例如:阿联酋地区用《UAE.S 5021 _ 2018.pdf》标准进行认证。ESTI 的DAB认证协议规定了家用和车载数字无线电的最低要求,及其对应的测试方法,是数字无线电认证标志规定的技术基础。本文以车载数字无线电接收器为例,进行部分DAB认证的介绍,详情请见官方文档。或联系博主获取DAB ESTI 103461的中文翻译资料。

qq_15271231的博客 1219

Elasticsearch-基础介绍及索引原理分析

介绍 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作: 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。 实时分析的分布式搜索引擎。 可以扩展到上百台服务器,处理PB级别...

baogui8961的博客 3525

天地图Api4.0.怎么根据geojson的数据。把一个省的所有市区标记色块和文字

天地图

肖肖肖丽珠的博客 1513

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: Elastic Stack梳理: 排序机制深度解析与工程实践优化指南
下一篇: Elastic Stack梳理: 聚合分析核心技术深度解析与最佳实践
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值