ES 中的各种分词器
ES内置的Analyzer分析器es自带了许多内置的Analyzer分析器,无需配置就可以直接在index中使用: 标准分词器(standard):以单词边界切分字符串为terms,根据Unicode文本分割算法。它会移除大部分的标点符号,小写分词后的term,支持停用词。 简单分词器(simple):该分词器会在遇到非字母时切分字符串,小写所有的term。 空格分词器(whitespace):遇到空格字符时切分字符串, 停用词分词器(stop):类似简单分词器,同时支持移除停用词。 关键词分词器(keyword):无操作分词器,会输出与输入相同的内容作为一个single term。 模式分词器(pattern):使用正则表达式讲字符串且分为terms。支持小写字母和停用词。 语言分词器(language):支持许多基于特定语言的分词器,比如english或french。 签名分词器(fingerprint):是一个专家分词器,会产生一个签名,可以用于去重检测。 自定义分词器:如果内置分词器无法满足你的需求,可以自定义custom分词器,根据不同的character filte...
ES 自定义分析器与自动补全
自动补全当用户在搜索框输入字符时,应提示与该字符有关的搜索项,如图: 这种根据用户输入字母提示完整词条的功能,就是自动补全。因为需要根据拼音字母推断,所以需要用到拼音分词功能。 测试用法如下: 12345POST /_analyze{ "text": "如家酒店还不错", "analyzer": "pinyin"} 结果: 0. 自定义分词器默认的拼音分词器会将每个汉字单独分为拼音,而我们希望每个词条形成一组拼音,需要对拼音分词器进行个性化定制。 Elasticsearch 中分词器(analyzer)由三部分组成: character filters:在 tokenizer 之前对文本进行处理,例如删除字符、替换字符 tokenizer:将文本按一定规则切割成词条(term),例如 keyword(不分词)、ik_smart [tokenizer] filter:对 tokenizer 输出的词条做进一步处理,例如大小写转换、同义词处理、拼音处理等 文...
ES 知识小结
基本概念 文档型存储的中间件,以 JSON 格式进行数据存储 支持对文档数据的增删改查,即 CRUD 操作 使用分片和复制技术,支持处理超大规模数据 基于 Java 编写,天然支持分布式,主副分片自动分配和复制 基于 Hash 模式进行分片路由 全文检索功能强大,字段自动建立倒排索引 适合用于搜索及日志存储场景,但写入数据并非实时可见,取决于 refresh_interval 参数的配置 集群核心概念 集群(cluster):由一个或多个节点组成,通过集群名称与其他集群区分。 节点(node):单个 Elasticsearch 实例,通常运行在一个隔离的容器或虚拟机中。 索引(index):一组文档的集合,类似关系型数据库中的"表"。 分片(shard):索引被拆分为多个分片,分布在不同节点上。ES 自动管理分片的分配和再平衡,用户无需关心细节。 副本(replica):主分片的完整拷贝。ES 默认为每个索引创建 5 个主分片,并为每个主分片创建 1 个副本。主分片和副本均可处理查询请求,但只有主分片能处理写入请求。副本可随时动态增减,额外副本能带来更大...
Elasticsearch 7.14+ 使用 _index_template 和 _component_template 替代 _template
组件模板和索引模板的应用先创建两个组件模板12345678910111213141516171819202122232425PUT _component_template/test1_template{ "template": { "mappings": { "properties": { "test1": { "type": "text" } } } }}PUT _component_template/test2_template{ "template": { "mappings": { "properties": { "test2"...
ES reindex 操作记录
什么时候需要重建索引以下情况需要执行 reindex: 索引的 mappings 发生变更 索引的 settings 发生变更 集群内或集群间需要做数据迁移 数据预处理使用 Ingest Pipeline 预处理1234567891011121314151617181920212223242526272829PUT _ingest/pipeline/split_xxx{ "processors": [ { "split": { "field": "xxx", "separator": "," }, { "set": { "field": "xxx", "value": "0" } ...
Too many dynamic script compilations within, max[75/5m]
ResponseError: search_phase_execution_exception: [circuit_breaking_exception] Reason: [script] Too many dynamic script compilations within, max: [75/5m]; please use indexed, or scripts with parameters instead; this limit can be changed by the [script.context.number_sort.max_compilations_rate] setting
Elasticsearch 大小写查询完全指南:Normalizer 的正确使用
概述Elasticsearch 中不同字段类型对大小写的处理方式不同。text 类型默认不区分大小写,而 keyword 类型默认区分大小写。通过 normalizer 可以实现 keyword 类型的大小写不敏感查询。 核心内容: 🔤 分词器大小写处理机制 🔑 Keyword 类型的局限性 ⚙️ Normalizer 原理和使用 📊 实战案例演示 适用场景: 需要精确匹配但忽略大小写 聚合查询时统一大小写 城市、国家等枚举值查询 默认行为Standard 分词器(Text 类型)特点: 默认不区分大小写 处理机制: 存储时:大写字符 → 自动转换为小写;查询时:自动转换为小写匹配。 示例: 123456789101112131415161718192021222324252627282930313233343536// 索引创建PUT /products{ "mappings": { "properties": { "name": { ...
Filebeat 采集 JSON 日志到 ES
需求描述使用 Filebeat 从 log 文件中采集 JSON 格式的日志,发送到 ES 中,并在 ES 中显示 JSON 日志的各字段和数据。 问题一:如何采集 JSON 格式的日志在 filebeat.yml 文件中进行相应的配置: 12345678910111213141516171819202122232425262728293031323334- type: log enabled: true paths: - E:\testjson.log processors: - script: lang: javascript source: > function process(event) { var message = event.Get("message"); message = message.replace(/\\x22/g,'"'); message = message.replace...
ELK 常用架构及使用场景
ELK 常用架构及使用场景 摘自创始人 最简单架构在这种架构中,只有一个 Logstash、Elasticsearch 和 Kibana 实例。Logstash 通过输入插件从多种数据源(比如日志文件、标准输入 Stdin 等)获取数据,再经过滤插件加工数据,然后经 Elasticsearch 输出插件输出到 Elasticsearch,通过 Kibana 展示。 Logstash 作为日志搜集器这种架构是对上面架构的扩展,把一个 Logstash 数据搜集节点扩展到多个,分布于多台机器,将解析好的数据发送到 Elasticsearch server 进行存储,最后在 Kibana 查询、生成日志报表等。 这种结构因为需要在各个服务器上部署 Logstash,而它比较消耗 CPU 和内存资源,所以比较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚至可能导致无法正常工作。 Beats 作为日志搜集器这种架构引入 Beats 作为日志搜集器。目前 Beats 包括四种: Packetbeat:搜集网络流量数据 Topbeat:搜集系统、进程和文件系统级别的 CP...
Elasticsearch 数据建模
Elasticsearch 数据建模数据建模 数据建模是创建数据模型的过程 数据模型是对真实世界进行抽象描述的一种工具和方法,实现对现实世界的映射 三个过程:概念模型=》逻辑模型=》数据模型 数据模型:结合具体的数据库,在满足业务读写性能等需求的前提下,确定最终定义 数据建模:功能需求+性能需求 逻辑模型(功能需求) 实体属性 实体之间的关系 搜索相关的配置 物理模型(性能需求) 索引模版 分片数量 索引Mapping 字段配置 关系处理 对字段进行建模 字段类型: Text vs Keyword Text 用于全文本字段,文本会被Analyzer分词 默认不支持聚合分析及排序。需要设置fielddata为true Keyword 用于id,枚举及不需要分词的文本。例如电话号码,email地址,手机号码,邮政编码,性别等 适用于Filter(精确匹配),Sorting和Aggregations 设置多字段类型 默认会为文本类型设置成text,并且设置一个keyword的子字段 在处理人类语言时,通...
