Elasticsearch知识点表格总结

         最近其实有点忙,在主攻Django项目和go语言项目,所以只能利用下班晚上和周末总结一些知识点,因为最近的公司的项目没有用上Elasticsearch,所以总结一下,方便以后复习,以及以后面试会用上,不然过段时间,这些知识点都遗忘了。

目录

 1.Elasticsearch 的定义

 2.  Elasticsearch数据类型概览

4.Elasticsearch映射(Mapping)和索引(Index)设置

5.Elasticsearch查询DSL(Domain Specific Language)

6. Elasticsearch聚合(Aggregations)操作

7.Elasticsearch高亮(Highlighting)

8. Elasticsearch排序(Sorting)

9. Elasticsearch索引刷新与写入性能

10. Elasticsearch安全与权限(Security and Authorization)

11. Elasticsearch监控与日志(Monitoring and Logging)

12.Elasticsearch集群管理(Cluster Management)

13.Elasticsearch索引别名(index Alias)

14.Elasticsearch索引末班与模式(Index Templates and Patterns)

15. Elasticsearch搜索操作(Search Operations)

16.Elasticsearch批量操作(Bulk Operations)

17.Elasticsearch搜索结果解析(Search Result Parsing)

18.Elasticsearch插件生态系统(Plugins Ecosystem)

19. Elasticsearch集群状态与维护

20. Elasticsearch灾难恢复与备份

21.Elasticsearch性能优化


 1.Elasticsearch 的定义

    Elasticsearch 是一个分布式、RESTful 风格的搜索与数据分析引擎。它可以用于全文搜索、结构化搜索以及分析;Elasticsearch 可以被用于构建实时搜索引擎,如电商网站的产品搜索功能。

 2.  Elasticsearch数据类型概览
数据类型分类 数据类型 描述 示例
核心数据类型 string (text/keyword) text 用于全文搜索,keyword 用于精确匹配。 "content": {"type": "text"}
numeric 包括 byteshortintegerlong 等。 "age": {"type": "integer"}
date 日期类型,用于存储日期和时间。 "date": {"type": "date"}
boolean 布尔类型,用于存储真值或假值。 `"is_published": {"type": "boolean"}
binary 二进制数据类型。 "file": {"type": "binary"}
范围数据类型 range 包括 integer_rangefloat_rangedate_range 等。 "age_range": {"type": "integer_range"}
复杂数据类型 object 用于存储结构化数据,如 JSON 对象。 "user": {"type": "object"}
nested 嵌套对象,允许对内嵌数据进行索引和搜索。 "comments": {"type": "nested"}
地理数据类型 geo_point 存储地理位置的经纬度。 "location": {"type": "geo_point"}
geo_shape 存储地理形状,如多边形。 "shape": {"type": "geo_shape"}
专门数据类型 ip 用于存储 IP 地址。 "ip": {"type": "ip"}
token_count 用于统计字段中的词项数量。 "word_count": {"type": "token_count"}
completion 用于自动完成功能的字段。 "suggest": {"type": "completion"}

       

3.Elasticsearch的分析器(Analyzers)和分词器(Tokenizer)

组件 描述 示例
分析器(Analyzer) 用于将文本转换为可搜索的项(tokens)。包括字符过滤器、分词器和词元过滤器。 "analyzer": {"my_custom_analyzer": {"type": "standard"}}
分词器(Tokenizer) 将文本分解成单个或多个词条(terms)。 "tokenizer": {"my_custom_tokenizer": {"type": "whitespace"}}
词元过滤器(Token Filter) 对分词器生成的词条进行转换或修改。 "filter": {"my_custom_filter": {"type": "lowercase"}}
标准分析器(Standard Analyzer) 默认分析器,适用于大多数文本。 "analyzer": {"default": {"type": "standard"}}
简单分析器(Simple Analyzer) 基于词元的边界分词,不使用词元过滤器。 "analyzer": {"my_simple_analyzer": {"type": "simple"}}
停用词过滤(Stop Token Filter) 移除常见的停用词,如“and”、“the”等。 "filter": {"my_stop_filter": {"type": "stop", "stopwords": ["and", "the"]}}

分析器在索引文档时用于文本字段的分析,Tokenizer 用于将文本分解成词条,而 Token Filter 用于进一步处理这些词条,例如小写化、同义词处理或删除停用词。

示例:

假设我们有一个博客平台,需要对用户提交的帖子内容进行索引,以便于后续的搜索。我们可能会定义一个自定义分析器,如下所示:

PUT /my_blog_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "standard",
          "stopwords": ["a", "an", "the"] // 自定义停用词列表
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  }
}

在这个示例中,我们创建了一个名为 my_blog_index 的新索引,并定义了一个自定义的标准分析器 my_custom_analyzer,它使用了一个自定义的停用词列表。然后,我们将这个分析器应用到了 content 字段上。

4.Elasticsearch映射(Mapping)和索引(Index)设置
概念 描述 示例
映射(Mapping) 定义文档中每个字段的数据类型和相关的属性,如是否可搜索、是否存储等。 "mappings": {"properties": {"title": {"type": "text"}}}
索引(Index) 存储数据的结构,类似于关系型数据库中的“表”。 "settings": {"index": {"number_of_shards": 3}}}
分片(Shards) 一个索引可以被分成多个分片以分布数据和提高查询性能。 如上例
副本(Replicas) 每个分片可以有多个副本以提供高可用性和读取性能。 "settings": {"index": {"number_of_replicas": 2}}}
全文搜索(Full-Text Search) 利用 text 类型字段进行全文搜索。 "query": {"match": {"content": "Elasticsearch"}}
精确搜索(Exact Search) 利用 keyword 类型字段进行精确匹配搜索。 "query": {"term": {"category.keyword": "finance"}}
多字段(Multi-fields) 一个字段可以定义为多个类型的字段,以支持不同的搜索需求。 "properties": {"title": {"type": "text", "fields": {"raw": {"type": "keyword"}}}}

示例:

假设我们正在设计一个新闻文章的索引,并且我们希望文章的标题能够支持全文搜索,同时支持基于标题的精确匹配搜索,如下所示:

PUT /news_index
{
  "settings": {
    "index": {
      "number_of_shards": 3,
      "number_of_replicas": 2
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "standard",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      },
      "content": {
        "type": "text"
      },
      "publication_date": {
        "type": "date"
      },
      "category": {
        "type": "keyword"
      }
    }
  }
}

在这个示例中,我们创建了一个名为 news_index 的新索引,并设置了3个主分片和2个副本。文章的 title 字段被定义为 text 类型以支持全文搜索,并且通过 fields 定义了一个名为 raw 的子字段,它是 keyword 类型,用于支持精确匹配搜索。content 字段同样被定义为 text 类型,而 publication_datecategory 分别被定义为 datekeyword 类型。

5.Elasticsearch查询DSL(Domain Specific Language)
查询类型 描述 示例
Match Query 用于在 text 类型字段上执行全文搜索。 "query": {"match": {"content": "Elasticsearch"}}
Term Query 用于在 keyword 类型字段上执行精确值匹配。 "query": {"term": {"category.keyword": "finance"}}
Range Query 用于查找数值或日期类型字段在指定范围内的文档。 "query": {"range": {"age": {"gte": 18}}}
Bool Query 组合多个查询,支持 mustshouldmust_notfilter "query": {"bool": {"must": [{"match": {"content": "Elasticsearch"}}]}}
Prefix Query 用于查找以特定前缀开始的 text 或 keyword 类型字段的文档。 "query": {"prefix": {"title.keyword": "fin"}}
Wildcard Query 支持使用通配符(* 和 ?)进行搜索。 "query": {"wildcard": {"user.keyword": "j*"}}
Fuzzy Query 允许搜索拼写错误的词条。 "query": {"fuzzy": {"title.keyword": "elasticsearche"}}
Regexp Query 使用正则表达式进行搜索。 "query": {"regexp": {"title.keyword": "elast.*"}}
Aggregations 用于执行数据分析和统计。 "aggs": {"avg_price": {"avg": {"field": "price"}}}

示例:

假设我们想要在新闻文章索引中搜索有关 "Elasticsearch" 的文章,并且希望结果按照发布日期排序,同时获取这些文章的平均阅读量:

GET /news_index/_search
{
  "query": {
    "match": {
      "content": "Elasticsearch"
    }
  },
  "sort": [
    {
      "publication_date": {
        "order": "desc"
      }
    }
  ],
  "aggs": {
    "average_article_views": {
      "avg": {
        "field": "article_views"
      }
    }
  }
}
<think>嗯,用户想要一份全面的Node.js知识点总结指南。从对话历史看,系统要求用中文回答,数学公式用$...$,独立公式用$$...$$,还要添加引用标识和生成相关问题。用户之前提到的引用材料涉及NPM、Node.js特性、Jenkins集成和项目结构,这些都需要整合进指南。用户可能是个刚接触Node.js的开发者,或者想系统梳理知识的中级开发者。ta特意强调"最全指南",说明需要结构化、覆盖面广的内容。结合引用资料里提到的核心特性、npm、项目配置等,我应该在指南中重点突出这些模块。先搭建知识框架:基础概念是根基,事件循环和异步机制是难点必须详解,npm作为生态核心单独成章。工程化部分结合用户引用的Jenkins和项目结构案例,实践应用部分补充常见开发场景。技术栈矩阵用Markdown表格呈现更直观,准备加个示例代码展示事件驱动。用户引用的项目结构(node-virtual-gamepads)是个很好的NativeAddon案例,可以用于说明C++扩展开发。引用[3]的Jenkins配置问题也值得在运维章节展开。需要注意的是所有专业术语首次出现时要解释,比如libuv和N-API。数学公式要求主要用于算法分析部分,比如快速排序时间复杂度$O(n\logn)$会特别标注。性能监控的关键指标如QPS可以用独立公式呈现:$$QPS=\frac{Req}{T}$$最后生成的问题要覆盖用户可能的知识盲区:事件循环原理、npm安全、服务端渲染这些进阶主题。运维监控和微服务设计的问题能引导用户深入企业级开发生态。</think> 以下是根据官方文档、社区实践及技术演进整理的 **Node.js 知识点总结最全指南**,涵盖核心概念、技术栈、工具链及最佳实践: --- ### **一、Node.js 核心特性** 1. **运行时架构** - 基于 **Chrome V8 引擎** 执行 JavaScript - 事件驱动模型:单线程主循环 + 异步 I/O 处理 - **Libuv 库**:实现非阻塞 I/O 和事件队列(如网络、文件操作)[^2] 2. **事件循环(Event Loop)** ```mermaid graph LR Timers --> Pending --> Poll --> Check --> Close ``` - 6 个阶段:计时器(`setTimeout`)、挂起回调、轮询、检查(`setImmediate`)、关闭回调 - 宏任务(MacroTask)与微任务(MicroTask)执行顺序 3. **模块系统** - **CommonJS** 规范:`require()` / `module.exports` - **ES Modules**(ESM):`import/export`(需 `package.json` 设置 `"type": "module"`) - 核心模块:`fs`, `http`, `path`, `events` 等 --- ### **二、关键技术栈** #### **1. 包管理与生态** | 工具 | 用途 | 示例命令 | |------------|-------------------------------|------------------------------| | **npm** | 包管理、依赖安装 | `npm install lodash` | | **npx** | 执行局部包命令 | `npx create-react-app my-app`| | **Yarn** | 替代 npm(缓存、并行安装) | `yarn add axios` | | **pnpm** | 节省磁盘空间 | `pnpm install` | #### **2. 异步编程模型** - **Callback**:传统方式(易回调地狱) ```javascript fs.readFile('file.txt', (err, data) => { ... }) ``` - **Promise**:链式调用 ```javascript fetch(url).then(res => res.json()).catch(handleError) ``` - **Async/Await**:同步化写法 ```javascript async function loadData() { const data = await db.query('SELECT * FROM users'); } ``` #### **3. 网络开发** - **HTTP 服务器**: ```javascript const server = http.createServer((req, res) => { res.end('Hello World'); }).listen(3000); ``` - **Web 框架**: - Express:中间件路由(`app.use()`) - Koa:洋葱模型、`async/await` 支持 - Fastify:高性能、Schema 验证 #### **4. 进程管理** - **`child_process`**:执行系统命令(`spawn`, `exec`) - **`cluster`**:多进程利用多核 CPU ```javascript if (cluster.isPrimary) { cluster.fork(); // 创建子进程 } ``` - **`pm2`**:生产环境进程守护、负载均衡 --- ### **三、工程化与工具链** #### **1. 项目结构规范** ```markdown my-project/ ├── src/ # 源码 ├── tests/ # 单元测试 ├── config/ # 配置文件 ├── node_modules/ # 依赖 ├── package.json # 项目元数据 └── .eslintrc.js # 代码规范 ``` #### **2. 质量保障** | 工具 | 用途 | |---------------|-----------------------| | **Jest** | 单元测试框架 | | **ESLint** | 静态代码检查 | | **Prettier** | 代码格式化 | | **TypeScript**| 静态类型检查 | #### **3. 部署与运维** - **容器化**:`Dockerfile` 配置 ```dockerfile FROM node:18-alpine WORKDIR /app COPY package.json . RUN npm install COPY . . CMD ["node", "src/index.js"] ``` - **CI/CD**:Jenkins + Node.js 集成(需配置环境变量 `PATH` 包含 Node 路径)[^3] --- ### **四、高级主题** 1. **C++ 扩展开发** - 使用 **N-API** 编写原生模块 - 配置文件 `binding.gyp`(示例见引用[^4]) 2. **性能优化** - **内存泄漏检测**:`--inspect` + Chrome DevTools - **负载测试**:`artillery` 或 `k6` - 关键指标:QPS(每秒请求数)、Latency(延迟) $$ \text{QPS} = \frac{\text{Total Requests}}{\text{Test Duration}} $$ 3. **安全实践** - 依赖安全扫描:`npm audit` / `snyk` - 输入验证:防止 XSS、SQL 注入 --- ### **五、学习资源** 1. 官方文档:https://nodejs.org/en/docs/ 2. 书籍:《Node.js 设计模式》、《深入浅出Node.js》 3. 社区:GitHub Trending、Stack Overflow ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值