快捷搜索:  汽车  科技

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧如查询 my-index 索引的映射所有类型可以参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html为了区分不同 type 下的同一名称的字段,Lucence 需要处理冲突,导致检索效率下降ES7.x 版本:URL 中的 type 参数为可选。ES8.x 版本:不支持 URL 中的 type 参数

  • 示例 3:按照年龄分组,然后将分组后的结果按照性别分组,然后查询出这些分组后的平均薪资

GET bank/_search { "query": { "match_all": { } } "aggs": { "ageAggr": { "terms": { "field": "age" "size": 10 } "aggs": { "genderAggr": { "terms": { "field": "gender.keyword" "size": 10 } "aggs": { "balanceAvg": { "avg": { "field": "balance" } } } } } } } "size": 0 }

从结果可以看到 31 岁的有 61 个。其中性别为 M 的 35 个,平均薪资 29565.6,性别为 F 的 26 个,平均薪资 26626.6。其他年龄的聚合结果类似。

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(1)

5.2.9 Mapping 映射

Mapping 是用来定义一个文档 ( document ) ,以及它所包含的属性 ( field ) 是如何存储和索引的。

  • 定义哪些字符串属性应该被看做全文本属性 ( full text fields )
  • 定义哪些属性包含数字,日期或地理位置
  • 定义文档中的所有属性是否都能被索引 ( _all 配置 )
  • 日期的格式
  • 自定义映射规则来执行动态添加属性

Elasticsearch7 去掉 tpye 概念:

关系型数据库中两个数据库表示是独立的,即使他们里面有相同名称的列也不影响使用,但 ES 中不是这样的。elasticsearch 是基于 Lucence 开发的搜索引擎,而 ES 中不同 type 与名称相同的 field 最终在 Lucence 中的处理方式是一样的。

为了区分不同 type 下的同一名称的字段,Lucence 需要处理冲突,导致检索效率下降

ES7.x 版本:URL 中的 type 参数为可选。

ES8.x 版本:不支持 URL 中的 type 参数

所有类型可以参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html

  • 查询索引的映射

如查询 my-index 索引的映射

GET /my-index/_mapping 返回结果: { "my-index" : { "mappings" : { "properties" : { "age" : { "type" : "integer" } "email" : { "type" : "keyword" } "employee-id" : { "type" : "keyword" "index" : false } "name" : { "type" : "text" } } } } }

  • 创建索引并指定映射

如创建 my-index 索引,有三个字段 age email name,指定类型为 interge keyword text

PUT /my-index { "mappings": { "properties": { "age": { "type": "integer" } "email": { "type": "keyword" } "name": { "type": "text" } } } 返回结果: { "acknowledged" : true "shards_acknowledged" : true "index" : "my-index" }

  • 添加新的字段映射

如在 my-index 索引里面添加 employ-id 字段,指定类型为 keyword

PUT /my-index/_mapping { "properties": { "employee-id": { "type": "keyword" "index": false } } }

  • 更新映射

我们不能更新已经存在的映射字段,必须创建新的索引进行数据迁移。

  • 数据迁移

POST _reindex { "source": { "index": "twitter" } "dest": { "index": "new_twitter" } }

回到顶部

六、中文分词

ES 内置了很多种分词器,但是对中文分词不友好,所以我们需要借助第三方中文分词工具包。

6.1 ES 中的分词的原理6.1.1 ES 的分词器概念

ES 的一个分词器 ( tokenizer ) 接收一个字符流,将其分割为独立的词元 ( tokens ) ,然后输出词元流。

ES 提供了很多内置的分词器,可以用来构建自定义分词器 ( custom ananlyzers )

6.1.2 标准分词器原理

比如 stadard tokenizer 标准分词器,遇到空格进行分词。该分词器还负责记录各个词条 ( term ) 的顺序或 position 位置 ( 用于 phrase 短语和 word proximity 词近邻查询 ) 。每个单词的字符偏移量 ( 用于高亮显示搜索的内容 ) 。

6.1.3 英文和标点符号分词示例

查询示例如下:

POST _analyze { "analyzer": "standard" "text": "Do you know why I want to study ELK? 2 3 33..." }

查询结果:

do you know why i want to study elk 2 3 33

从查询结果可以看到:

(1)标点符号没有分词。

(2)数字会进行分词。

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(2)

6.1.4 中文分词示例

但是这种分词器对中文的分词支持不友好,会将词语分词为单独的汉字。比如下面的示例会将 悟空聊架构 分词为 悟 空 聊 架 构,期望分词为 悟空,聊,架构。

POST _analyze { "analyzer": "standard" "text": "悟空聊架构" }

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(3)

我们可以安装 ik 分词器来更加友好的支持中文分词。

6.2 安装 ik 分词器6.2.1 ik 分词器地址

ik 分词器地址:

https://github.com/medcl/elasticsearch-analysis-ik/releases

先检查 ES 版本,我安装的版本是 7.4.2,所以我们安装 ik 分词器的版本也选择 7.4.2

http://192.168.56.10:9200/ { "name" : "8448ec5f3312" "cluster_name" : "elasticsearch" "cluster_uuid" : "xC72O3nKSjWavYZ-EPt9Gw" "version" : { "number" : "7.4.2" "build_flavor" : "default" "build_type" : "docker" "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96" "build_date" : "2019-10-28T20:40:44.881551Z" "build_snapshot" : false "lucene_version" : "8.2.0" "minimum_wire_compatibility_version" : "6.8.0" "minimum_index_compatibility_version" : "6.0.0-beta1" } "tagline" : "You Know for Search" }

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(4)

6.2.2 安装 ik 分词器的方式6.2.2.1 方式一:容器内安装 ik 分词器
  • 进入 es 容器内部 plugins 目录

docker exec -it <容器 id> /bin/bash

  • 获取 ik 分词器压缩包

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip

  • 解压缩 ik 压缩包

unzip 压缩包

  • 删除下载的压缩包

rm -rf *.zip 6.2.2.2 方式二:映射文件安装 ik 分词器

进入到映射文件夹

cd /mydata/elasticsearch/plugins

下载安装包

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip

  • 解压缩 ik 压缩包

unzip 压缩包

  • 删除下载的压缩包

rm -rf *.zip 6.2.2.3 方式三:Xftp 上传压缩包到映射目录

先用 XShell 工具连接虚拟机 ( 操作步骤可以参考之前写的文章 [02. 快速搭建 Linux 环境-运维必备] ( http://www.jayh.club/#/05. 安装部署篇/01. 环境搭建篇 )) ,然后用 Xftp 将下载好的安装包复制到虚拟机。

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(5)

猜您喜欢: