拾忆Elasticsearch02:Elasticsearch的基本命令回顾

Elasticsearch 使用的是标准的 RESTful 风格的 API 和 JSON。此外,官方还构建和维护了很多其他语言的客户端,例如 Java、Python、.NET、SQL 和 PHP。与此同时,社区也贡献了很多客户端。这些客户端使用起来简单自然,而且就像 Elasticsearch 一样,不会对我们的使用方式进行限制。

在这一part,我们先回顾Elasticsearch的基本命令,后续再回顾ES再Java中的使用。

1、Restful风格

RESTFUL是一种网络应用程序的设计风格开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

Restful风格经常用,就不过多介绍了,看到本文的应该都是已经知道Restful的。

2、 Elasticsearch常用操作

演示的Elasticsearch版本为7.6.2

2.1、 索引操作

2.1.1创建没有结构的索引

PUT ip地址:端口号/索引名

路径:ip地址:端口号/索引名
注:在kibana中所有的请求都会省略ip地址:端口号,之后的路径我们省略写ip地址:端口号,请求方式:PUT

在这里插入图片描述
在这里插入图片描述

2.1.2为索引添加结构

POST /索引名/_mapping 
{ 
	"properties":{ 
		"域名1":{ 
			"type":域的类型, 
			"store":是否存储, 
			"index":是否创建索引, 
			"analyzer":分词器 
		},
		"域名2":{ 
			... 
			} 
		} 
	}
  • 域的类型:
核心类型具体类型
字符串类型text
整数类型long,integer,short,byte
浮点类型double,float
日期类型date
布尔类型boolean
数组类型array
对象类型object
不进行分词的字符串keyword
  • index:该域是否创建索引。只有值设置为true,才能根据该域的关键词查询文档。
  • store:是否单独存储。如果设置为true,则该域能够单独查询。

在这里插入图片描述
在这里插入图片描述

2.1.3创建有结构的索引

PUT /索引名 
{ 
	"mappings":{ 
		"properties":{ 
			"域名1":{ 
				"type":域的类型, 
				"store":是否单独存储, 
				"index":是否创建索引, 
				"analyzer":分词器 
			},
			"域名2":{ 
				... 
			} 
		} 
	} 
}

在这里插入图片描述

2.1.4删除索引

DELETE /索引名

在这里插入图片描述

2.2 文档操作

methodurl地址描述
PUT(创建,修改)localhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)
POST(创建)localhost:9200/索引名称/类型名称创建文档(随机文档id)
POST(修改)localhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETE(删除)localhost:9200/索引名称/类型名称/文档id删除文档
GET(查询)localhost:9200/索引名称/类型名称/文档id查询文档通过文档ID
POST(查询)localhost:9200/索引名称/类型名称/文档id/_search查询所有数据

2.2.1 新增

PUT方式

PUT /索引/_doc/id值 
{ 
	"field名":field值 
}

_doc 默认类型(default type),type 在未来的版本中会逐渐弃用,因此产生一个默认类型进行代替。
在这里插入图片描述

POST方式

POST /索引/_doc/[id值]
{ 
	"field名":field值 
}

id值不写时自动生成文档 idid 和已有 id重复时修改文档。

  • id
    在这里插入图片描述

  • 不写id
    在这里插入图片描述
    可以看到,id是个随机生成的。

我们对已有的id进行新增
在这里插入图片描述
这时,_version增加了1。

2.2.2 修改

有两种方式:

  • 通过新增同一个id进行覆盖
    上面使用POSTid2的进行重复插入时修改了name,接下来我们尝试部分数据进行修改,故意省略不修改部分数据
    在这里插入图片描述
    结果发现,省略的部分已经丢失
    在这里插入图片描述
    重新插入原来的数据,使用PUT命令重复以上实验,结果相同。
    在这里插入图片描述
    通过以上方式修改,发现
    1.版本+1(_version
    2.但是如果漏掉某个字段没有写,那么更新是没有写的字段 ,会消失。

  • 通过以下_update 命令修改

POST /索引/_doc/id值/_update 
{ 
	"doc":{ 
		域名:} 
}

先将上面修改的2号数据恢复一下。
在这里插入图片描述
修改
在这里插入图片描述
查看结果,发现没有修改的域没有丢失,而且修改成功了!
在这里插入图片描述
修改成功的时候,发现上面显示一段红字

#! Deprecation: [types removal] Specifying types in document update requests is deprecated, use the endpoint /{index}/_update/{id}instead.

我们尝试用该命令修改,也可以成功修改(我也是第一次发现这个 = _ = !)
在这里插入图片描述
在这里插入图片描述
通过以上方式修改,发现
1.版本+1(_version)(有些人说这个版本不会改变,我上面修改显示_version也会变化)
2.如果漏掉某个字段没有写,也不会丢失数据。

综上所述,建议使用POST /索引/_doc/id值/_update POST /索引/_update/id值进行修改。

2.2.3 删除

DELETE /索引/_doc/id值

先查一下,看到版本是13
在这里插入图片描述
在这里插入图片描述
可以看到版本号+1了。

注: ElasticSearch执行删除操作时,ES先标记文档为 deleted状态,而不是直接物理删除。当ES存储空间不足或工作空闲时,才会执行物理删除操作。
ElasticSearch执行修改操作时,ES不会真的修改Document中的数据,而是标记ES中原有的文档为deleted状态,再创建一个新的文档来存储数据。

查询太多内容,另起一节。

2.3 文档查询

所有的查询操作都是使用GET命令。

搜索前我们准备一些示例数据

{
  "id":1001,
  "name":"邓紫棋",
  "description":"一位创作型歌手,是一个天才美女。",
  "hobby":["唱歌","创作"]
},
{
  "id":1002,
  "name":"蔡徐坤",
  "description":"一个穿背带裤的两年半练习生,是一个人气艺人。",
  "hobby":["唱","跳","rap","篮球"]
},
{
  "id":1003,
  "name":"小黑子",
  "description":"自诩是ikun,是一类自称是蔡徐坤粉丝的群体,包括俊男美女。",
  "hobby":["香精煎鱼","香翅捞饭","油饼","荔枝","美食","卤醋鸡脚"]
},
{
  "id":1004,
  "name":"Gloria",
  "description":"是邓紫棋在新专辑《启示录》MV中的虚拟人物,同时也是邓紫棋爸爸给她取得英文名字。",
  "hobby":["未知"]
}

2.3.1 简单搜索

查询所有
  • match_all:查询所有数据
GET /索引名/_search
{
  "query": {
    "match_all": {}
  }
}

在这里插入图片描述

分词检索
  • match:全文检索。将查询条件分词后再进行搜索。
GET /索引名/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  }
}

在这里插入图片描述

“一美女”分词后可分为“一”、“美女”,可以看到匹配了两条数据,max_score显示最大的_score_score 体现匹配程度。

短语检索
  • match_phrase:短语检索。搜索条件不做任何分词解析,在搜索字段对应的倒排索引中精确匹配。
GET /索引名/_search
{
  "query": {
    "match_phrase": {
      "FIELD": "PHRASE"
    }
  }
}

在这里插入图片描述
“一美女”不分词,自然是匹配不到合适的。

范围搜索
  • range:范围搜索。对数字类型的字段进行范围搜索
GET /索引名/_search
{
  "query": {
    "range": {
      "FIELD": {
        "gt/gte": 最小值,
        "lt/lte": 最大值
      }
    }
  }
}

gt/lt:大于/小于
gte/lte:大于等于/小于等于

在这里插入图片描述

单词/词组搜索(精确查询)

term/terms:搜索条件不做任何分词解析,在搜索字段对应的倒排索引中精确匹配

  • term 直接通过 倒排索引 指定词条查询
  • 适合查询 numberdatekeyword ,不适合text

textkeyword
text

  • 支持分词全文检索、支持模糊、精确查询,不支持聚合,排序操作;
  • text类型的最大支持的字符长度无限制,适合大字段存储;

keyword

  • 不进行分词直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。
  • keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
GET /索引名/_search
{
  "query": {
    "term": {
      "FIELD": {
        "value": "VALUE"
      }
    }
  }
}

GET /索引名/_search
{
  "query": {
    "terms": {
      "FIELD": [
        "VALUE1",
        "VALUE2"
      ]
    }
  }
}

在这里插入图片描述
我们的descriptiontext类型,查询不到内容,但idinteger类型,可以查到
在这里插入图片描述

其他查询方式

上面我们把查询条件写在{}内,另外可以写成一行
例如:GET /people/_doc/_search?q=name:Gloria
在这里插入图片描述

2.3.2 复杂搜索

模糊搜索
  • match:匹配(会使用分词器解析(先分析文档,然后进行查询))

在搜索时关键词有可能会输入错误,ES搜索提供了自动纠错功能,即ES的模糊查询。使用match方式可以实现模糊查询。模糊查询对中文的支持效果一般,我们使用英文数据测试模糊查询。

GET /索引名/_search
{
  "query": {
    "match": {
      "FIELD": {
        "query": 搜索条件,
        "fuzziness": 最多错误字符数,不能超过2 
      }
    }
  }
}

可以看到我们搜的是Glario,在容错范围内,能搜到Gloria。
在这里插入图片描述

过滤其他字段
  • 使用source过滤其他字段,展示需要的部分
GET /index/_search
{
  "query": {
   ……
  },
  "_source": "{field}"
}

在这里插入图片描述

结果排序

ES中默认使用相关度分数_score实现排序,可以通过搜索语法定制化排序。

GET /people/_search
{
  "query": {
    ……
  },
  "sort": [
    {
      "FIELD": {
        "order": "desc"/"asc"
      }
    }
  ] 
}

在这里插入图片描述
当我们使用排序后,搜索结果的 "_score" : null

多条件查询(bool)
  • must 相当于 and
  • should 相当于 or
  • must_not 相当于 not (... and ...)
  • filter 过滤

must
以下匹配'description'包含“美女”and 'hobby'包含“唱歌”,以下类似。
在这里插入图片描述
should
在这里插入图片描述
must_not
在这里插入图片描述
filter

注意,不是过滤掉filter体内的,从结果来看,是留下符合filter规则的

在这里插入图片描述

分页查询

formsize 分页

在这里插入图片描述

高亮查询

在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮。如:
在这里插入图片描述
我们通过开发者工具查看网页源码,可以看到源码中给这些高亮的关键字加了标签
在这里插入图片描述
我们可以在关键字左右加入标签字符串,数据传入前端即可完成高亮显示,ES可以对查询出的内容中关键字部分进行标签和样式的设置。

GET /索引名/_search
{
  "query": {
   ……
  },
  #高亮
  "highlight": {
  	#前缀
    "pre_tags": {},
    #后缀
    "post_tags": {},  
    "高亮显示的字段名": { 
		// 返回高亮数据的最大长度 
		"fragment_size":100, 
		// 返回结果最多可以包含几段不连续的文字 
		"number_of_fragments":5  
  }
}

在这里插入图片描述

SQL查询

在ES7之后,支持SQL语句查询文档:

GET /_sql?format=txt 
{ 
	"query": SQL语句 
}

在这里插入图片描述
开源版本的ES并不支持通过Java操作SQL进行查询,如果需要操作 SQL查询,则需要氪金(购买白金版)

3、 预告

今天是中秋节,祝我中秋节快乐。这篇就写到这了。下一篇,把ES整合到springboot中去。拜拜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.projectfrist.mapper.EmpMapper.look是指在MyBatis中出现的一个异常。该异常表示无法绑定指定的查询语句。根据提供的错误信息,可能是在com.example.projectfrist.mapper包下的EmpMapper类中的look方法的绑定有问题。 要解决这个问题,可以按照以下步骤进行: . 首先,检查启动类的配置。确保已正确配置了MyBatis的相关信息,包括映射器和查询语句的位置。 如果启动类的配置没有问题,可以尝试以下方法继续排查: 2. 检查EmpMapper类的定义和配置。确保该类中的查询语句名称与错误信息中提到的look方法一致,并且语句的位置正确。 如果以上步骤都没有解决问题,还可以尝试以下方法: 3. 检查查询语句的XML文件或注解配置。确保查询语句的名称、参数和返回类型与EmpMapper类中的方法定义一致,并且语句的位置正确。 如果问题仍然存在,可能需要进一步排查其他的配置或代码错误,并检查是否有其他相关的异常信息提供更多线索。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):xxx问题](https://blog.csdn.net/lvoelife/article/details/128017529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.xxx 的解决...](https://blog.csdn.net/Hello_World_QWP/article/details/126713075)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值