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

1. 安装IK分词器

ElasticSearch 默认采用的分词器, 是单个字分词 ,效果很差 ,我们需要安装一个更实用的分词器,这里采用 IK分词器

中文分词器 IK Analyzer 3.0 发布

jar包下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

源码下载地址:https://github.com/medcl/elasticsearch-analysis-ik/tree

在这里插入图片描述

这里用 ZIP 格式下载

在这里插入图片描述

IK 分词器解压即可使用,打开ES的安装目录,然后打开 plugins 目录,建立一个文件夹(我这里取名为:elasticsearch-analysis-ik-6.6.2,为了区分别的插件),将ZIP文件解压在这个文件下就可以。

在这里插入图片描述

解压之后重启ES:

在这里插入图片描述


2. Kibana安装和使用

Kibana是一个针对Elasticsearch的开源分析及可视化平台,使用Kibana可以查询、查看并与存储在ES索引的数据进行交互操作,使用Kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。

Kibana 是 ELK 的一个组成。

E:EalsticSearch,搜索和分析的功能

L:Logstach,搜集数据的功能,类似于flume(使用方法几乎跟flume一模一样),是日志收集系统1

K:Kibana,数据可视化(分析),可以用图表的方式来去展示,文不如表,表不如图,是数据可视化平台

在这里插入图片描述

在这里插入图片描述

ELK概述

ELK 实现语言 简介
ElasticSearch Java 实时的分布式搜索和分析引擎,可用于全文检索,结构化搜索以及分析,基层基于Lucene。类似于Solr
Logstash JRuby 具有实时渠道能力的数据收集引擎,包含输入、过滤、输出模块,一般在过滤模块中做日志格式化的解析工作
Kibana JavaScript 为ElasticSerach提供分析平台和可视化的Web平台。他可以ElasticSerach的索引中查找,呼唤数据,并生成各种维度的表图

ELK的相关参考资料:

ELK官网:https://www.elastic.co/

ELK官网文档:https://www.elastic.co/guide

ELK中文手册:https://www.elastic.co/guide

ELK中文社区:https://elasticsearch.cn

2.1 Kibana下载

【注意】 Kibana 版本要和你安装的ES版本一致

最新版本下载地址:https://www.elastic.co/cn/downloads/kibana

其他版本下载地址:https://www.elastic.co/cn/downloads/past-releases

在这里插入图片描述选择对应你的电脑版本进行下载zip文件

在这里插入图片描述

下载好之后,解压:

在这里插入图片描述

解压之后,会有一个 kibana-版本号-系统-位的文件夹(kibana-6.6.2-windows-x86_64

在这里插入图片描述

内部文件目录:

在这里插入图片描述

类型 描述
**home** Kibana home 目录就是解压之后的目录(kibana-6.6.2-windows-x86_64)
**bin** 二进制脚本,包括 `kibana` 启动 Kibana 服务和 `kibana-plugin` 安装插件。
**config** 配置文件包括 `kibana.yml` 。
**data** Kibana 和其插件写入磁盘的数据文件位置。
**optimize** 编译过的源码。某些管理操作(如,插件安装)导致运行时重新编译源码。
**plugins** 插件文件位置。每一个插件都一个单独的二级目录。

启动Kibana,在bin目录下的 kibana.bat 双击启动

在这里插入图片描述

在这里插入图片描述

启动之后通过地址:http://localhost:5601/,访问

在这里插入图片描述

【注意】启动Kibana之前要先启动ES,不然会报错:Error: No Living connections Unable to revive connection: http://localhost:9200/

kibana配置https://www.elastic.co/guide/cn/kibana/current/settings.html

如果需要修改配置,修改 /config/kibana.yml 配置文件。

在这里插入图片描述

Kibana的端口号5601,是一个Web应用程序。

访问地址:http://localhost:5601/

访问Kibana页面,默认情况设置:

Discover 页面加载时选择的是默认索引模式。

时间过滤器设置的为最近15分钟。

搜索查询设置的是 match-all(\*)

可以通过:http://localhost:5601/status,来检查Kibana的当前状态,返回图标的格式显示。

在这里插入图片描述

也可以通过:http://localhost:5601/api/status,返回以JSON格式输出的Kibana的状态信息。

在这里插入图片描述

搜索数据的时候,你可以使用Kibana标准的查询语言(基于Lucene的查询语法)或者完全基于JSON的Elasticsearch查询语言DSL

引号包括起来作为一个整体来搜索

在搜索的时候,用引号 " " 包裹起来的一段字符串叫短语搜索

例如,filed:"Hello World Kibana" 将在filed字段中搜索 "Hello World Kibana" 这个短语。如果没有引号包裹,将会匹配到包含这些词的所有文档,并且不管它们的顺序如何。也就是有引号包裹的时候,只会匹配到 "Hello World Kibana" ,而不会匹配到类似于 "Hello Kibana World " 这种顺序不同的。

在Dev Tools 下写DSL语句,执行

在这里插入图片描述Dev Tools的 Console 控制台支持CRUL,有以下特点

  • 可以通过使用绿色三角形按钮向ES提交请求。

    在这里插入图片描述

  • 使用扳手菜单来做其他有用的事情(copy as curl,auto indent)。

    在这里插入图片描述

  • 可以以cURL格式粘贴请求,它们将被转换为控制台语法

2.2 DSL语句

一般ES查询结果文档的图:

在这里插入图片描述

1 索引操作

查看集群的健康状况:GET /_cluster/health 或者 GET _cat/health

在这里插入图片描述集群健康值(status 字段):

  • 绿色 green —— 最健康的状态,代表所有的主分片和副本分片都可用,每个索引的primary shard和replica shard 都处于active的状态。
  • 黄色 yellow ——所有的主分片可用,但是部分副本分片不可用,即每个索引的primary shard是active的状态,但是部分replica shard不是active的状态,处于不可用的状态。
  • 红色 red ——部分主分片不可用,不是所有的primary shard 都是active的状态,这时候是危险的,至少我们不能保证写数据是安全的。(此时执行查询部分数据仍然可以查到,遇到这种情况,尽可能的快速解决。)

查询所有的索引:GET /_cat/indices?v

在这里插入图片描述

查询所有信息:GET _all

删除某个索引:DELETE /user

创建索引库:PUT user(增加一个user的index库)

更详细地配置:

number_of_shards 分片数量;

number_of_replicas 副本数量。


  • PUT 类似于SQL中的新增
  • DELETE 类似于SQL中的删除
  • POST 类似于SQL中的修改
  • GET 类似于SQL中的查查询

PUT user
<span class="token punctuation">{</span>
    <span class="token string">"settings"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
        <span class="token string">"number_of_shards"</span><span class="token keyword">:</span> 5,
        <span class="token string">"number_of_replicas"</span><span class="token keyword">:</span> 2
      <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

**2 映射操作**

添加映射(**ik_smart**是粗粒度检索,本身**分词**会较细粒度**max_word**少):

<pre>`PUT user/userinfo/_mapping
<span class="token punctuation">{</span>
    <span class="token string">"properties"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
        <span class="token string">"name"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
			<span class="token string">"type"</span><span class="token keyword">:</span> <span class="token string">"text"</span>,
			<span class="token string">"analyzer"</span><span class="token keyword">:</span> <span class="token string">"ik_smart"</span>,
			<span class="token string">"store"</span><span class="token keyword">:</span> false,
			<span class="token string">"search_analyzer"</span><span class="token keyword">:</span> <span class="token string">"ik_smart"</span>
		<span class="token punctuation">}</span>,
		<span class="token string">"age"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
			<span class="token string">"type"</span><span class="token keyword">:</span> <span class="token string">"long"</span>,
			<span class="token string">"store"</span><span class="token keyword">:</span> <span class="token boolean">false</span>
		<span class="token punctuation">}</span>,
		<span class="token string">"description"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
			<span class="token string">"type"</span><span class="token keyword">:</span> <span class="token string">"text"</span>,
			<span class="token string">"analyzer"</span><span class="token keyword">:</span> <span class="token string">"ik_smart"</span>,
			<span class="token string">"store"</span><span class="token keyword">:</span> false,
			<span class="token string">"search_analyzer"</span><span class="token keyword">:</span> <span class="token string">"ik_smart"</span>
		<span class="token punctuation">}</span>
      <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

查看映射: `GET user/userinfo/_mapping`

**3 添加数据**

保存一篇文档到索引当中去 (相当于插入一条记录到一个数据库表当中)

保存文档到索引当中,如果没有设置id,会自动分配一个id。

<pre>`PUT user/userinfo/1
<span class="token punctuation">{</span>
	<span class="token string">"name"</span><span class="token keyword">:</span><span class="token string">"孙悟空"</span>,
	<span class="token string">"age"</span>:2599,
	<span class="token string">"description"</span><span class="token keyword">:</span><span class="token string">"齐天大圣"</span>
<span class="token punctuation">}</span>
PUT user/userinfo/2
<span class="token punctuation">{</span>
	<span class="token string">"name"</span><span class="token keyword">:</span><span class="token string">"如来佛祖"</span>,
	<span class="token string">"age"</span>:2586,
	<span class="token string">"description"</span><span class="token keyword">:</span><span class="token string">"多宝道人"</span>
<span class="token punctuation">}</span>
`</pre>

**4 查询数据**

获取某个索引中某个类型某个id的数据(返回Json格式):

`GET 索引名/类型名/id`例如:

`GET user/userinfo/1` 或 `GET user/userinfo/1?_source`

获取某个索引中某个类型的某个id的某列数据:

`GET user/userinfo/1?_source=name`#

获取某个索引中某个类型某个id的某几列数据:

`GET user/userinfo/1?_source=name,description`

**match** - 标准查询(全文本查询/精准查询一般都用得上)

<pre>`<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

**match_all**查询所有数据,匹配所有数据。

<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match_all"</span><span class="token keyword">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

**_source** :返回指定字段的内容

<pre>`<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token string">"_source"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">"description"</span><span class="token punctuation">,</span> <span class="token string">"name"</span><span class="token punctuation">]</span>
<span class="token punctuation">}</span>
`</pre>

查询数据的时候,查询条件也会进行分词(所以这个方法查询到两条结果)

<pre>`<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空 如来佛祖"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

**match_phrase**:让查询条件不进行分词,精确匹配(下面这个就查询不到数据,没有name为 `孙悟空 如来佛祖` 的文档数据)

<pre>`<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match_phrase"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空 如来佛祖"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

**highlight** - 将查询结果高亮显示,默认以html的 `&lt;em&gt;` 标签包裹,可以自定义替换(支持html语言),关于高亮可以查看这个&gt;&gt;&gt; [https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-highlighting.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-highlighting.html)

<pre>`<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token string">"highlight"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"fields"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210226155309288.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNTQyNTM0,size_16,color_FFFFFF,t_70)

**5. 更新数据Post**

PUT采用的是覆盖的方式进行文档的更新,但是这种修改会丢失数据, 这是全局的修改。

<pre>`PUT user/userinfo/1
<span class="token punctuation">{</span>
	<span class="token string">"name"</span><span class="token keyword">:</span><span class="token string">"猪八戒"</span>,
	<span class="token string">"age"</span>:18,
<span class="token punctuation">}</span>
`</pre>

执行上述的操作后,发现之前的 description 列消失了。

如果只需要更新某个字段使用Post(一般更新都使用Post):

<pre>`POST user/userinfo/1
<span class="token punctuation">{</span>
  <span class="token string">"doc"</span>:<span class="token punctuation">{</span>
    <span class="token string">"name"</span><span class="token keyword">:</span><span class="token string">"沙悟净"</span>,
	<span class="token string">"description"</span><span class="token keyword">:</span><span class="token string">"物流搬运工"</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

**Post 和 Put 更新数据的区别**

> Post是局部更新数据,别的数据不改变,只更新需要更新的数据。
PUT是全局更新,类似于将原数据删除,再插入新的更新数据。
**6 删除数据**

删除一条记录:`DELETE user/userinfo/1`

**7 高级查询**

搜索**排序**:按age年龄排序

<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
		<span class="token string">"match_all"</span><span class="token keyword">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
	<span class="token punctuation">}</span>,
	<span class="token string">"sort"</span>:<span class="token punctuation">{</span>
		<span class="token string">"age"</span>:<span class="token punctuation">{</span>
			<span class="token string">"order"</span><span class="token keyword">:</span> <span class="token string">"desc"</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

或者

<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
	<span class="token string">"sort"</span>:<span class="token punctuation">{</span>
		<span class="token string">"age"</span>:<span class="token punctuation">{</span>
			<span class="token string">"order"</span><span class="token keyword">:</span> <span class="token string">"desc"</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

**分页**查询

from:从哪页开始

size:每页数据量

<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
		<span class="token string">"match_all"</span><span class="token keyword">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
	<span class="token punctuation">}</span>,
	<span class="token string">"sort"</span>:<span class="token punctuation">{</span>
		<span class="token string">"age"</span>:<span class="token punctuation">{</span>
			<span class="token string">"order"</span><span class="token keyword">:</span> <span class="token string">"desc"</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>,
	<span class="token string">"from"</span><span class="token keyword">:</span> 0,
	<span class="token string">"size"</span><span class="token keyword">:</span> 2
<span class="token punctuation">}</span>
`</pre>

**过滤**查询

**term** 词项搜索主要用于分词精确匹配字符串、数值、日期等值

<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
		<span class="token string">"term"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
			<span class="token string">"age"</span>:<span class="token punctuation">{</span>
				<span class="token string">"value"</span><span class="token keyword">:</span> 2599
			<span class="token punctuation">}</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

多个term词项搜索(多条件用**terms**)

<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
		<span class="token string">"terms"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
			<span class="token string">"age"</span><span class="token keyword">:</span> <span class="token punctuation">[</span>2599, 2586, 21<span class="token punctuation">]</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

**范围过滤**查询

**range** 过滤允许按照指定范围查找一批数据。

> **get**:起始数据
**lte**:结束数据

相当于一个闭区间 `[get, lte]`
<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
		<span class="token string">"range"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
			<span class="token string">"age"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
				<span class="token string">"gte"</span><span class="token keyword">:</span> 18,
				<span class="token string">"lte"</span><span class="token keyword">:</span> 2586
			<span class="token punctuation">}</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

**exists**过滤查询 - 查找拥有某个域的数据(类似于mysql中该列有数据的就能查询出来)

<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
		<span class="token string">"exists"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
			<span class="token string">"field"</span><span class="token keyword">:</span> <span class="token string">"description"</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

**bool** **过滤 - 用来合并多个过滤条件查询结果的布尔逻辑**(当需要多个查询条件拼接的时候就用bool),它包含以下操作符:

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

<pre>`GET /user/userinfo/_search
GET /user/userinfo/_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
    <span class="token string">"bool"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
      <span class="token string">"must"</span><span class="token keyword">:</span> <span class="token punctuation">[</span>
        <span class="token punctuation">{</span>
          <span class="token string">"term"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
            <span class="token string">"name"</span><span class="token keyword">:</span> <span class="token string">"孙悟空"</span>
          <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
      <span class="token punctuation">]</span>,
      <span class="token string">"filter"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
        <span class="token string">"range"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
          <span class="token string">"age"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
            <span class="token string">"gte"</span><span class="token keyword">:</span> 18,
            <span class="token string">"lte"</span><span class="token keyword">:</span> 2600
          <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

根据某个字符搜索满足条件的数据

<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
      <span class="token string">"description"</span><span class="token keyword">:</span> <span class="token string">"齐天大圣"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

根据字段前缀查询满足添加的数据

<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
    <span class="token string">"prefix"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
        <span class="token string">"value"</span><span class="token keyword">:</span> <span class="token string">"孙"</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
`</pre>

根据多个字段查询 - 根据fields中的列,找满足query的值(从多列中查找)

<pre>`GET /user/userinfo/_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
    <span class="token string">"multi_match"</span><span class="token keyword">:</span> <span class="token punctuation">{</span>
      <span class="token string">"query"</span><span class="token keyword">:</span><span class="token string">"孙悟空"</span>,
      <span class="token string">"fields"</span><span class="token keyword">:</span> <span class="token punctuation">[</span>
        <span class="token string">"name"</span>,
        <span class="token string">"description"</span>
      <span class="token punctuation">]</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

`</pre>

、、

代码&gt;&gt;&gt;

<pre>`# 查看集群健康状态
<span class="token constant">GET</span> <span class="token operator">/</span>_cluster<span class="token operator">/</span>health
<span class="token constant">GET</span> _cat<span class="token operator">/</span>health

# 查询所有的索引
<span class="token constant">GET</span> <span class="token operator">/</span>_cat<span class="token operator">/</span>indices<span class="token operator">?</span>v

# 查询所有信息
<span class="token constant">GET</span> _all

# 获取集群的节点列表
<span class="token constant">GET</span> <span class="token operator">/</span>_cat<span class="token operator">/</span>nodes<span class="token operator">?</span>v

# 删除某个索引
<span class="token constant">DELETE</span> demo

# 创建索引库
<span class="token constant">PUT</span> user
<span class="token punctuation">{</span>
    <span class="token string">"settings"</span>  <span class="token punctuation">:</span> <span class="token punctuation">{</span>
        <span class="token string">"number_of_shards"</span><span class="token punctuation">:</span> <span class="token number">5</span><span class="token punctuation">,</span>
        <span class="token string">"number_of_replicas"</span><span class="token punctuation">:</span> <span class="token number">2</span>
      <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 添加映射(<span class="token constant">IK</span>分词器:ik_smart是粗粒度检索)
<span class="token constant">PUT</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_mapping
<span class="token punctuation">{</span>
  <span class="token string">"properties"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
			<span class="token string">"type"</span><span class="token punctuation">:</span> <span class="token string">"text"</span><span class="token punctuation">,</span>
			<span class="token string">"analyzer"</span><span class="token punctuation">:</span> <span class="token string">"ik_smart"</span><span class="token punctuation">,</span>
			<span class="token string">"store"</span><span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
			<span class="token string">"search_analyzer"</span><span class="token punctuation">:</span> <span class="token string">"ik_smart"</span>
		<span class="token punctuation">}</span><span class="token punctuation">,</span>
		<span class="token string">"age"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
			<span class="token string">"type"</span><span class="token punctuation">:</span> <span class="token string">"long"</span><span class="token punctuation">,</span>
			<span class="token string">"store"</span><span class="token punctuation">:</span> <span class="token boolean">false</span>
		<span class="token punctuation">}</span><span class="token punctuation">,</span>
		<span class="token string">"description"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
			<span class="token string">"type"</span><span class="token punctuation">:</span> <span class="token string">"text"</span><span class="token punctuation">,</span>
			<span class="token string">"analyzer"</span><span class="token punctuation">:</span> <span class="token string">"ik_smart"</span><span class="token punctuation">,</span>
			<span class="token string">"store"</span><span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
			<span class="token string">"search_analyzer"</span><span class="token punctuation">:</span> <span class="token string">"ik_smart"</span>
		<span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 查看映射
<span class="token constant">GET</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_mapping

# 添加数据
<span class="token constant">PUT</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span><span class="token number">1</span>
<span class="token punctuation">{</span>
	<span class="token string">"name"</span><span class="token punctuation">:</span><span class="token string">"孙悟空"</span><span class="token punctuation">,</span>
	<span class="token string">"age"</span><span class="token punctuation">:</span><span class="token number">2599</span><span class="token punctuation">,</span>
	<span class="token string">"description"</span><span class="token punctuation">:</span><span class="token string">"齐天大圣"</span>
<span class="token punctuation">}</span>
<span class="token constant">PUT</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span><span class="token number">2</span>
<span class="token punctuation">{</span>
	<span class="token string">"name"</span><span class="token punctuation">:</span><span class="token string">"如来佛祖"</span><span class="token punctuation">,</span>
	<span class="token string">"age"</span><span class="token punctuation">:</span><span class="token number">2586</span><span class="token punctuation">,</span>
	<span class="token string">"description"</span><span class="token punctuation">:</span><span class="token string">"多宝道人"</span>
<span class="token punctuation">}</span>

# 查询数据
<span class="token constant">GET</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span><span class="token number">1</span>
# 或者这么查询
<span class="token constant">GET</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span><span class="token number">1</span><span class="token operator">?</span>_source

# match_all <span class="token operator">-</span> 查询所有数据
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match_all"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# match <span class="token operator">-</span> <span class="token function">标准查询</span><span class="token punctuation">(</span>全文本查询<span class="token operator">/</span>精准查询一般都用得上<span class="token punctuation">)</span>
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 查询数据的时候,查询条件也会进行分词(所以查询到两条结果)
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空 如来佛祖"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 使用match_phrase,让查询条件不进行分词,精确匹配
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match_phrase"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空 如来佛祖"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

  # highlight <span class="token operator">-</span> 将查询结果高亮显示,默认是<span class="token operator">&lt;</span>em<span class="token operator">&gt;</span>标签,可以自定义替换
  <span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
  <span class="token punctuation">{</span>
    <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"match"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
        <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空"</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token string">"highlight"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"fields"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
        <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>

# 通过 _source 返回指定字段的内容
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token string">"_source"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">"description"</span><span class="token punctuation">,</span> <span class="token string">"name"</span><span class="token punctuation">]</span>
<span class="token punctuation">}</span>

# <span class="token function">获取user索引中某个类型的某个id的某列</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span>数据
<span class="token constant">GET</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span><span class="token number">1</span><span class="token operator">?</span>_source<span class="token operator">=</span>name
<span class="token constant">GET</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span><span class="token number">2</span><span class="token operator">?</span>_source<span class="token operator">=</span>description

# 获取某个索引中某个类型某个id的某几列数据
<span class="token constant">GET</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span><span class="token number">1</span><span class="token operator">?</span>_source<span class="token operator">=</span>name<span class="token punctuation">,</span>description

# 局部更新数据 Post(age没有更新还在)
<span class="token constant">POST</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span><span class="token number">1</span><span class="token operator">/</span>_update
<span class="token punctuation">{</span>
  <span class="token string">"doc"</span><span class="token punctuation">:</span><span class="token punctuation">{</span>
    <span class="token string">"name"</span><span class="token punctuation">:</span><span class="token string">"沙悟净"</span><span class="token punctuation">,</span>
	  <span class="token string">"description"</span><span class="token punctuation">:</span><span class="token string">"物流搬运工"</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 全局更新 <span class="token constant">PUT</span>(删掉重建,age被删除了)
<span class="token constant">PUT</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span><span class="token number">1</span>
<span class="token punctuation">{</span>
  <span class="token string">"doc"</span><span class="token punctuation">:</span><span class="token punctuation">{</span>
    <span class="token string">"name"</span><span class="token punctuation">:</span><span class="token string">"沙悟净"</span><span class="token punctuation">,</span>
	  <span class="token string">"description"</span><span class="token punctuation">:</span><span class="token string">"物流搬运工"</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 搜索(按age年龄降序输出)
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
		<span class="token string">"match_all"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
	<span class="token punctuation">}</span><span class="token punctuation">,</span>
	<span class="token string">"sort"</span><span class="token punctuation">:</span><span class="token punctuation">{</span>
		<span class="token string">"age"</span><span class="token punctuation">:</span><span class="token punctuation">{</span>
			<span class="token string">"order"</span><span class="token punctuation">:</span> <span class="token string">"desc"</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 分页查询 <span class="token keyword">from</span>:从哪页开始,size:每页数据量
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
		<span class="token string">"match_all"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
	<span class="token punctuation">}</span><span class="token punctuation">,</span>
	<span class="token string">"sort"</span><span class="token punctuation">:</span><span class="token punctuation">{</span>
		<span class="token string">"age"</span><span class="token punctuation">:</span><span class="token punctuation">{</span>
			<span class="token string">"order"</span><span class="token punctuation">:</span> <span class="token string">"desc"</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span><span class="token punctuation">,</span>
	<span class="token string">"from"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
	<span class="token string">"size"</span><span class="token punctuation">:</span> <span class="token number">2</span>
<span class="token punctuation">}</span>

# 过滤查询 <span class="token operator">-</span> term(精确匹配字符串、日期、数值等)
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
		<span class="token string">"term"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
			<span class="token string">"age"</span><span class="token punctuation">:</span><span class="token punctuation">{</span>
				<span class="token string">"value"</span><span class="token punctuation">:</span> <span class="token number">2599</span>
			<span class="token punctuation">}</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 多个term词项搜索(多条件)
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
		<span class="token string">"terms"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
			<span class="token string">"age"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token number">2599</span><span class="token punctuation">,</span> <span class="token number">2586</span><span class="token punctuation">,</span> <span class="token number">21</span><span class="token punctuation">]</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# range 范围过滤查询 <span class="token operator">-</span> 过滤允许按照指定范围查找一批数据。
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
		<span class="token string">"range"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
			<span class="token string">"age"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
				<span class="token string">"gte"</span><span class="token punctuation">:</span> <span class="token number">18</span><span class="token punctuation">,</span>
				<span class="token string">"lte"</span><span class="token punctuation">:</span> <span class="token number">2586</span>
			<span class="token punctuation">}</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# exists过滤查询 <span class="token operator">-</span> 查找拥有某个域的数据
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
	<span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
		<span class="token string">"exists"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
			<span class="token string">"field"</span><span class="token punctuation">:</span> <span class="token string">"description"</span>
		<span class="token punctuation">}</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# bool 过滤 <span class="token operator">-</span> 合并多个过滤条件查询结果的布尔逻辑(多个查询条件拼接)

<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"bool"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"must"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>
        <span class="token punctuation">{</span>
          <span class="token string">"term"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
            <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"孙悟空"</span>
          <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
      <span class="token punctuation">]</span><span class="token punctuation">,</span>
      <span class="token string">"filter"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
        <span class="token string">"range"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
          <span class="token string">"age"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
            <span class="token string">"gte"</span><span class="token punctuation">:</span> <span class="token number">18</span><span class="token punctuation">,</span>
            <span class="token string">"lte"</span><span class="token punctuation">:</span> <span class="token number">2600</span>
          <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 根据某个字符搜索满足条件的数据
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"match"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"description"</span><span class="token punctuation">:</span> <span class="token string">"齐天大圣"</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 根据字段前缀查询满足添加的数据
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"prefix"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
        <span class="token string">"value"</span><span class="token punctuation">:</span> <span class="token string">"孙"</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 根据多个字段查询 <span class="token operator">-</span> 根据fields中的列,找满足query的值(从多列中查找)
<span class="token constant">GET</span> <span class="token operator">/</span>user<span class="token operator">/</span>userinfo<span class="token operator">/</span>_search
<span class="token punctuation">{</span>
  <span class="token string">"query"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
    <span class="token string">"multi_match"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token string">"query"</span><span class="token punctuation">:</span><span class="token string">"孙悟空"</span><span class="token punctuation">,</span>
      <span class="token string">"fields"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>
        <span class="token string">"name"</span><span class="token punctuation">,</span>
        <span class="token string">"description"</span>
      <span class="token punctuation">]</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# 删除数据
<span class="token constant">DELETE</span> user<span class="token operator">/</span>userinfo<span class="token operator">/</span><span class="token number">2</span>

猜你喜欢

转载自blog.csdn.net/cpongo11/article/details/114286503