文章目录

  • 前言
  • 一、IK 分词器
    • 1.1 简介
    • 1.2 安装
    • 1.3 简单的参数说明
  • 二、Kibana 使用 — 掌握 DSL 语句
    • 2.1 简介
    • 2.2 Kibana 下载安装
    • 2.3 Kibana 使用
      • 2.3.1 配置索引
      • 2.3.2 数据搜索
      • 2.3.3 DSL 语句
        • 2.3.3.1 Query DSL 结构化查询介绍
        • 2.3.3.2 索引操作
        • 2.3.3.3 数据查询
        • 2.3.3.4 查询模式
        • 2.2.3.5 完整 DSL 语句代码

前言

在了解过 ElasticSearch 的基础和基本的对外提供的接口之后,我接触了 IK分词器和 Kibana 工具。


提示:以下是本篇文章正文内容,下面案例可供参考

一、IK 分词器

1.1 简介

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开 始,IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目Lucene为应用主体的,结合词典分词和 文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于 Lucene项目,同时提供了对Lucene的默认优化实现。

IK分词器3.0的特性如下:

  1. 采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。 ;
  2. 采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科 学计数法),中文词汇(姓名、地名处理)等分词处理;
  3. 对中英联合支持不是很好,在这方面的处理 比较麻烦.需再做一次查询,同时是支持个人词条的优化的词典存储,更小的内存占用;
  4. 支持用户词 典扩展定义 ;
  5. 针对Lucene全文检索优化的查询分析器IKQueryParser;采用歧义分析算法优化查询 关键字的搜索排列组合,能极大的提高Lucene检索的命中率。

1.2 安装

IK 分词器的下载地址 , 下载完成之后上传到我们准备好的服务器上,并进行解压。然后改名为 ik(改名是为了方便操作,可以不改)。

解压和重命名的指令:

# 解压
unzip elasticsearch-analysis-ik-5.6.8.zip
# 重命名
mv elasticsearch ik

然后,将 IK 分词器插件拷贝到 ElasticSearch 容器的 plugins 目录下(容器的下载安装参考前面的 ElasticSearch基础):

# ik 插件的路径根据自己的实际情况改一下
docker cp ./ik  c_es:/usr/share/elasticsearch/plugins

然后重启容器,插件就生效了。

1.3 简单的参数说明

  • _analyze: 发送请求到分词器;
  • analyzer: 分词器:有两种,一种是 ik_smar 会做最粗粒度的拆分 , 比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。 一种是 ik_max_word 会将文本做最细粒度的拆分, 比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共 和国、人民、共和国、大会堂、大会、会堂等词语。
  • pretty: 格式化数据,便于查看。
  1. 测试1
http://192.168.191.128:9200/_analyze?analyzer=ik_smart&pretty=true&text=我是程序员

返回结果:

2. 测试2

http://192.168.191.128:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我是程序员


总结:

  1. ik_max_word:会将文本做最细粒度的拆分;
    比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂”等词语;
  2. ik_smart:会做最粗粒度的划分;
    比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、人民大会堂”。

二、Kibana 使用 — 掌握 DSL 语句

2.1 简介

我们原来使用过 elasticsearch-header 插件实现数据查找的,但是 elasticsearch-header 的功能比较单一,因此引入一个更加专业的工具实现对日志的实时分析。就是 Kibana。

Kibana 是一款开源的数据分析可视化平台,他是 ElasticSearch 成员之一,用于和 ElasticSearch 协作。我们可以通过 Kibana 对 ElasticSearch 索引中的数据进行搜索、查看和交互。可以很方便的利用图表、表格以及地图对数据进行多元化的分析和呈现。

Kibana 可以使大数据通俗易懂。它很简单,基于浏览器的界面使得可以快速创建和分享动态数据仪表板来追踪 ElasticSearch 的实时数据变化。

搭建 Kibana 也非常简单。通过他的镜像自带的容器就可以实现安装,并不需要额外的代码和设施。

2.2 Kibana 下载安装

  1. 镜像下载
docker pull docker.io/kibana:5.6.8
  1. 安装 kibana 容器
docker run -it -d -e ELASTICSEARCH_URL=http://192.168.198.100:9200 --name
kibana -p 5601:5601 kibana:5.6.8

ELASTICSEARCH_URL=http://192.168.198.100:9200 是指链接的 ElasticSearch 地址。5601 是访问端口。

  1. 部分快捷键
ctrl+i ⾃动缩进
ctrl+enter 提交请求
down 打开⾃动补全菜单
enter或tab 选中项⾃动补全
esc 关闭补全菜单
  1. 测试
# 根据自己的实际的 地址和端口进行访问
http://192.168.198.100:5601/

2.3 Kibana 使用

2.3.1 配置索引

使用 Kibana 时,必须至少配置一个索引。索引用于标识 ElasticSearch 以运行搜索、分析和配置字段。

我们修改索引名称的匹配方式即可,下面两个选项不用勾选。然后点击 create,会展示出当前配置的索引的域信息;

我们在刚进来的时候是看不到 create 的按钮的(因为默认的匹配规则 logstash-* 在我们的 ElasticSearch 中匹配不到信息),当我们在 Index pattern 的输入框中输入我们要连接的索引后,就会出现 create 按钮

我们创建之后,就能看到对应的索引的信息了

域的每个标题选项分别代表如下意思:

2.3.2 数据搜索

Discover 为数据搜索部分,可以对日志信息进行搜索操作。

可以使⽤Discover实现数据搜索过滤和搜索条件显⽰以及关键词搜索:

2.3.3 DSL 语句

2.3.3.1 Query DSL 结构化查询介绍

Query DSL 是一个 JAVA 开源框架,用于构建类型安全的 SQL 查询语句。采用 API 代替传统的拼接字符串来构造查询语句。目前 Query DSL 支持的平台包括 JPA、JDO、SQL、Java Collections、RDF、Lucene、Hibernate Search。ElasticSearch 提供了一整套基于 JSON 的 DSL 语言来定义查询。

2.3.3.2 索引操作

  1. 查询所有索引
GET /_cat/indices?v


2. 删除某个索引

DELETE /blog1  # DELETE 索引名称

  1. 新增索引
PUT /user

  1. 创建映射
PUT /user/userinfo/_mapping
{"properties": {"name": {"type": "text","analyzer": "ik_smart","search_analyzer": "ik_smart"},"city": {"type": "text","analyzer": "ik_smart","search_analyzer": "ik_smart"},"age": {"type": "long"},"description": {"type": "text","analyzer": "ik_smart","search_analyzer": "ik_smart"}}
}


5. 新增文档数据

PUT /user/userinfo/1
{"name": "李四","age": 22,"city": "北京","description": "李四来自湖北武汉 "
}


在增加几条数据:

# 新增⽂档数据 id=2
PUT /user/userinfo/2
{"name":"王五","age":35,"city":"深圳","description":"王五家住在深圳!"
}
#新增⽂档数据 id=3
PUT /user/userinfo/3
{"name":"张三","age":19,"city":"深圳","description":"在深圳打⼯,来⾃湖北武汉"
}
#新增⽂档数据 id=4
PUT /user/userinfo/4
{"name":"张三丰","age":66,"city":"武汉","description":"在武汉读书,家在武汉!"
}
#新增⽂档数据 id=5
PUT /user/userinfo/5
{"name":"赵⼦⻰","age":77,"city":"⼴州","description":"赵⼦⻰来⾃深圳宝安,但是在⼴州⼯作!","address":"⼴东省茂名市"
}
#新增⽂档数据 id=6
PUT /user/userinfo/6
{"name":"赵毅","age":55,"city":"⼴州","description":"赵毅来⾃⼴州⽩云区,从事电⼦商务8年!"
}
#新增⽂档数据 id=7
PUT /user/userinfo/7
{"name":"赵哈哈","age":57,"city":"武汉","description":"武汉赵哈哈,在深圳打⼯已有半年了,⽉薪7500!"
}
  1. 修改数据
    a. 替换操作
    更新数据可以使用之前的增加操作,,这种操作回将数据整个替换:
#更新数据,id=4
PUT /user/userinfo/4
{"name":"张三丰","description":"在武汉读书,家在武汉!在深圳⼯作!"
}


在查看一下数据:

b. 替换操作:
使用 POST 更新某个列数据

再使用 GET 命令查询一下数据:

7. 删除 Document

DELETE /user/userinfo/7

2.3.3.3 数据查询

  1. 查询所有数据
GET /user/_search


2. 根据 ID 查询

GET /user/userinfo/3


3. sort 排序

GET /user/_search
{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}}]
}

  1. 分页
    from:从第 N 条记录开始查询;
    size:每页显示的数量
GET /user/_search
{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}}],"from": 0,"size": 2
}

2.3.3.4 查询模式

  1. term 查询
    term 主要用于分词精确匹配,如字符串、数值、日期等。但不适用于 (1)列中除英文字符外还有其他值; (2)字符串值中有冒号或者中文; (3)系统自带属性(如 _version)
GET _search
{"query": {"term": {"city": {"value": "深圳"}}}
}


2. terms 查询
terms 和 term 有点相似,但是 terms 可以指定多个匹配条件。如果某个字段制定了多个值,那么文档需要一起做匹配

GET _search
{"query": {"terms": {"city": ["北京","深圳"]}}
}


3. match 查询
会对我们的查询语句进行匹配

{"query": {"match": {"city": "深圳北京"}}
}

  1. query_string 查询
GET _search
{"query": {"query_string": {"default_field": "city","query": "深圳北京"}}
}


5. range 查询

# range:表示过滤范围
# gt 表示 >;  gte 表示 >=
# lt 表示 <;  lte 表示 <=
GET _search
{"query": {"range": {"age": {"gte": 30,"lte": 50}}}
}

  1. exists 查询
    exists 过滤可以用于查找拥有某个域的数据:
GET _search
{"query": {"exists": {"field": "address"}}
}


7. bool 查询
bool 可以用来合并多个查询条件的布尔逻辑值;它包含以下操作符:

  • must:多个查询条件的完全匹配,相当于 and;
  • must_not:多个查询条件的相反匹配,相当于 not;
  • should:至少有一个查询条件匹配,相当于 or。

这些参数可以分别继承一个过滤条件或者一个过滤条件的数组。

GET _search
{"query": {"bool": {"must": [{"term": {"city": {"value": "深圳"}}},{"range": {"age": {"gte": 10,"lte": 20}}}]}}
}


8. match_all 查询
可以查询到所有文档,是没有查询条件下的你默认语句;

GET _search
{"query": {"match_all": {}}
}

  1. match 查询
    match 查询是一个标准查询,不管你需要全文本查询还是精确查询,及本省都需要用到它。
    如果使用 match 查询一个全文本字段,他会在真正查询之前,先通过分析器分析 match 以下要查询的字符:
GET _search
{"query": {"match": {"city": "北京"}}
}

  1. prefix 查询
    以 某字符开头 的,可以更简单的使用 prefix ,例如:查询所有以 张 开始的用户描述:
GET  _search
{"query": {"prefix": {"name": {"value": "赵"}}}
}


11. multi_match 查询
multi_match 查询允许允许在做 match 查询的基础上同时搜索多个字段,在多个字段(域)中同时查一个:

GET _search
{"query": {"multi_match": {"query": "深圳","fields": ["city","description"]}}
}

2.2.3.5 完整 DSL 语句代码

# 查看所有索引
GET /_cat/indices?v# 删除 skuinfo 索引
DELETE /skuinfo# 新增 user 索引
PUT /user# 创建 userinfo 映射
PUT /user/userinfo/_mapping
{"properties": {"name": {"type": "text","analyzer": "ik_smart","search_analyzer": "ik_smart"},"city": {"type": "text","analyzer": "ik_smart","search_analyzer": "ik_smart"},"age": {"type": "long"},"description": {"type": "text","analyzer": "ik_smart","search_analyzer": "ik_smart"}}
}# 新增文档 user 中的 id 为 1 的文档
# 更新文档
PUT /user/userinfo/1
{"name": "李四","age": 22,"city": "北京","description": "李四来自湖北武汉 "
}# 根据 id 查询,查询 id=4 的文档数据
GET user/userinfo/4# 更新 id=4 的文档信息
POST /user/userinfo/4/_update
{"doc": {"name": "张三丰1","description": "在武汉读书,家在武汉!在深圳⼯作........."}
}    #删除数据
DELETE user/userinfo/4#查询所有
GET /user/_search#搜索排序
GET /user/_search
{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}}]
}#分⻚实现
GET /user/_search
{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}}],"from": 0,"size": 2
}#查询-term
# term 查询
GET _search
{"query": {"term": {"city": {"value": "深圳"}}}
}#查询-terms 允许多个Term
GET _search
{"query": {"terms": {"city": ["北京","深圳"]}}
}# match查询
GET _search
{"query": {"match": {"city": "深圳北京"}}
}# query_string
GET _search
{"query": {"query_string": {"default_field": "city","query": "深圳北京"}}
}#过滤-range 范围过滤
#gt表示> gte表示=>
#lt表示< lte表示<=
GET _search
{"query": {"range": {"age": {"gte": 30,"lte": 50}}}
}#过滤搜索 exists:是指包含某个域的数据检索
GET _search
{"query": {"exists": {"field": "address"}}
}#过滤搜索 bool
#must : 多个查询条件的完全匹配,相当于 and。
#must_not : 多个查询条件的相反匹配,相当于 not。
#should : ⾄少有⼀个查询条件匹配, 相当于 or。
GET _search
{"query": {"bool": {"must": [{"term": {"city": {"value": "深圳"}}},{"range": {"age": {"gte": 10,"lte": 20}}}]}}
}#查询所有 match_all
GET _search
{"query": {"match_all": {}}
}#字符串匹配
GET _search
{"query": {"match": {"city": "北京"}}
}#前缀匹配 prefix
GET  _search
{"query": {"prefix": {"name": {"value": "赵"}}}
}#多个域匹配搜索
GET _search
{"query": {"multi_match": {"query": "深圳","fields": ["city","description"]}}
}

ElasticSearch 学习(二)—— IK 分词器和 Kibana相关推荐

  1. ElasticSearch学习:ik分词器

    IK分词器是关于中文的一个分词器,有IK分词器自然还有别的分词器,比如说pinyin分词器针对的是拼音分词,letter针对的是letter分词等,ES有一个很好的方式就是通过插件的形式来扩展这些功能 ...

  2. Elasticsearch安装IK分词器,kibana安装是基本使用,DSL语句入门

    文章目录 1. 安装IK分词器 2. Kibana安装和使用 2.1 ELK概述 2.2 Kibana下载 2.3 DSL语句 1. 安装IK分词器 ElasticSearch 默认采用的分词器, 是 ...

  3. Elasticsearch中安装IK分词器

    Elasticsearch中默认的分词器对中文的支持不好,会分隔成一个一个的汉字.而IK分词器对中文的支持比较好一些,主要有两种模式"ik_smart"和"ik_max_ ...

  4. ElasticSearch用法和IK分词器

    ElasticSearch用法和IK分词器 ElasticSearch 是什么? 为什么选择ES? ES提供的能力 ES常用使用场景 ES架构 ES 基本概念 ES 数据类型 ElasticSearc ...

  5. Elasticsearch(二) ik分词器的安装 以及 自定义分词

    ik分词器作为elasticsearch的一个插件,则是安装在es插件中. ik分词器的安装 1,创建ik分词目录上传与es相同版本的ik分词器插件,不同版本可能es启动 报错 在elasticsea ...

  6. 商城-商品搜索(Elasticsearch、IK分词器、Kibana使用)

    1. Elasticsearch安装 本章节将采用Docker安装,不过在市面上还有很多采用linxu安装,关于linux安装,已经提供了安装手册,这里就不讲了. (1)docker镜像下载 dock ...

  7. Elasticsearch下安装ik分词器

    安装ik分词器(必须安装maven) 上传相应jar包 解压到相应目录 unzip elasticsearch-analysis-ik-master.zip(zip包) cp -r elasticse ...

  8. 【Elasticsearch】es IK分词器的安装

    1.概述 [Elasticsearch]es 7.8.0 唐诗三百首写入 Elasticsearch 会发生什么 之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字 ...

  9. window10下安装Elasticsearch(es)和IK分词器

    1 安装Elasticsearch 7.x  1.1 下载地址 https://www.elastic.co/cn/downloads/elasticsearch 1.2 下载后解压的目录结构 Ela ...

  10. Elasticsearch插件管理(ik分词器、附件文本抽取插件)

    倒排索引 Elasticsearch 使用一种称为倒排索引的结构,它适用于快速的全文搜索.见其名,知其意,有倒排索引,肯定会对应有正向索引.正向索引(forward index),反向索引(inver ...

最新文章

  1. 用计算机计算器课程,信息技术学科“神奇的计算器”教学设计
  2. CABasicAnimation fillMode和removedOnCompletion
  3. sql注入语句示例大全_SQL Group By语句用示例语法解释
  4. Android测试提升效率批处理脚本
  5. sparql查询mysql_SPARQL常用查询
  6. python爬虫之json数据处理
  7. 差分滤波器的实现及作用于图像提取图像的特征
  8. 微信小程序疑难杂症---修改数组里的某个属性的值
  9. Matlab中break语句
  10. 【高等数学】方差的集合意义
  11. Java基于JSP+Servlet的校友论坛管理系统
  12. 开发一个App来为你的女神“化妆”!
  13. iDRAC 7 Enterp license
  14. git pull遇到报错:! [rejected]xxx-> xxx (non-fast-forward)
  15. Java面向对象常见概念
  16. python和java哪个更有潜力-Python和JAVA的就业前景哪个好点?
  17. 大数据产业中的新方式:数据交易
  18. toolbar wpf 按钮带文字_Tob设计:中台设计组件按钮
  19. 【数据库基础】正则化(Normalization)P2:BCNF,MVD,4NF
  20. [IC笔试题] FIFO深度计算

热门文章

  1. 图论-生成树-黑暗城堡
  2. 2021-07-07 Day01 前端基础第一天
  3. 科学家要用3D打印技术复制大脑,今后人类都可以“永生”了
  4. 淘金网UCskype客服系统
  5. css背景图片全屏_使用CSS3的全屏背景图片幻灯片
  6. 自动以管理员身份运行bat脚本
  7. 微信开发工具tabBar中的list 图片为啥加载不出来?
  8. SAN存储和服务器虚拟化安装方案,ESX/ESXi虚拟化系统与SAN存储结构结合的配置安装流程...
  9. c语言长 短整型有无符号,整型和短整型,有符号和无符号
  10. 凛冬之翼---php写入数据库时汉字全部变为空白