删除索引请求格式:
DELETE /索引库名
示例:
使用HEAD请求,查看索引是否存在:
HEAD /索引库名
示例:
索引有了,接下来肯定是添加数据。但是,在添加数据之前必须定义映射。映射是定义文档的过程,文档包含哪些字段,这些字段是否保存,是否索引,是否分词等,配置清楚映射,Elasticsearch会帮我们进行索引库的创建。
创建映射字段:
PUT /索引库名/_mapping/类型名称
{
"properties": {
"字段名": {
"type": "类型",
"index": true,
"store": true,
"analyzer": "分词器"
}
}
}
-
类型名称:就是前面将的type的概念,类似于数据库中的不同表
字段名:任意填写 ,可以指定许多属性,例如:
-
type:类型,可以是text、long、short、date、integer、object等
-
index:是否索引,默认为true
-
store:是否存储,默认为false
-
analyzer:分词器,这里的
ik_max_word
即使用ik分词器
字段属性详解:
type:数据类型
-
String类型,分两种:
text:
可分词,不可参与聚合keyword:
不可分词,数据会作为完整字段进行匹配,可以参与聚合 -
Numerical:数值类型,分两类
基本数据类型:
long、interger、short、byte、double、float、half_float
浮点数的高精度类型:
scaled_float
,需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。 -
Date:日期类型, elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
index:影响字段的索引情况
-
true:字段会被索引,则可以用来进行搜索。默认值就是true,你不进行任何配置,字段就会被索引
-
false:字段不会被索引,不能用来搜索,有些字段是我们不希望被索引的,需要手动设置index为false
store:是否将数据进行额外存储。
Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做_source
的属性中。而且我们可以通过过滤_source
来选择哪些要显示,哪些不显示。而如果设置store为true,就会在_source
以外额外存储一份数据,多余,因此一般我们都会将store设置为false,事实上,store的默认值就是false。
boost:激励因子,与lucene中一样
示例:发起请求
查看映射关系:
GET /索引库名/_mapping
示例:
通过POST请求,可以向一个已经存在的索引库中添加数据。
POST /索引库名/类型名
{
"key":"value"
}
示例:
查询数据:
get _search
{
"query":{
"match_all":{}
}
}
示例:
智能判断: 事实上Elasticsearch非常智能,你不需要给索引库设置任何mapping映射,它也可以根据你输入的数据来判断类型,动态添加数据映射。
测试一下:
POST /ly/goods/2
{
"title":"苹果手机",
"images":"http://image.ly.com/12479122.jpg",
"price":2899.00,
"stock": 200,
"saleable":true
}
额外添加了stock库存,和saleable是否上架两个字段。查看结果:
在看下索引库的映射关系:
把刚才新增的请求方式改为PUT,就是修改了。不过修改必须指定id,
-
id对应文档存在,则修改
-
id对应文档不存在,则新增
删除使用DELETE请求,同样,需要根据id进行删除:
DELETE /索引库名/类型名/id值
示例:
基本查询:
GET /索引库名/_search
{
"query":{
"查询类型":{
"查询条件":"查询条件值"
}
}
}
这里的query代表一个查询对象,里面可以有不同的查询属性
-
查询类型:
match_all
,match
,term
,range
等等 -
查询条件:查询条件会根据类型的不同,写法也有差异,后面详细讲解
查询所有(match_all):
示例:
GET /ly/_search
{
"query":{
"match_all": {}
}
}
匹配查询(match):
添加数据,便于测试:
PUT /ly/goods/2
{
"title":"苹果手机",
"images":"http://image.ly.com/12479122.jpg",
"price":3899.00
}
PUT /ly/goods/3
{
"title":"华为手机",
"images":"http://image.ly.com/12479122.jpg",
"price":1899.00
}
PUT /ly/goods/4
{
"title":"小米电视",
"images":"http://image.ly.com/12479122.jpg",
"price":5899.00
}
or关系: match
类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是or的关系
GET /heima/_search
{
"query":{
"match":{
"title":"小米电视"
}
}
}
结果:
在上面的案例中,不仅会查询到电视,而且与小米相关的都会查询到,多个词之间是or
的关系。
and关系: 某些情况下,我们需要更精确查找,我们希望这个关系变成and
,可以这样做:
GET /heima/_search
{
"query":{
"match": {
"title": {
"query": "小米电视",
"operator": "and"
}
}
}
}
结果:
本例中,只有同时包含小米
和电视
的词条才会被搜索到。
or和and之间:
在 or
与 and
间二选一有点过于非黑即白。 如果用户给定的条件分词后有 5 个查询词项,想查找只包含其中 4 个词的文档,该如何处理?我们如何获得处于中间的某种结果?
match
查询支持 minimum_should_match
最小匹配参数, 这让我们可以指定必须匹配的词项数用来表示一个文档是否相关。我们可以将其设置为某个具体数字,更常用的做法是将其设置为一个百分数
,因为我们无法控制用户搜索时输入的单词数量:
GET /ly/_search
{
"query":{
"match":{
"title":{
"query":"小米曲面电视",
"minimum_should_match": "75%"
}
}
}
}
结果:
多字段查询(multi_match):
multi_match
与match
类似,不同的是它可以在多个字段中查询
GET /ly/_search
{
"query":{
"multi_match": {
"query": "小米",
"fields": [ "title", "subTitle" ]
}
}
}
结果:
词条匹配(term):
term
查询被用于精确值 匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串
GET /heima/_search
{
"query":{
"term":{
"price":2699.00
}
}
}
结果:
多词条精确匹配(terms):
terms
查询和 term 查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件:
GET /ly/_search
{
"query":{
"terms":{
"price":[1899.00,3899.00]
}
}
}
结果:
默认情况下,elasticsearch在搜索的结果中,会把文档中保存在_source
的所有字段都返回。如果我们只想获取其中的部分字段,我们可以添加_source
的过滤
直接指定字段:
示例:
GET /ly/_search
{
"_source": ["title","price"],
"query": {
"term": {
"price": 2699
}
}
}
返回的结果:
指定includes和excludes:
可以通过:
-
includes:
来指定想要显示的字段 -
excludes:
来指定不想要显示的字段
示例:
GET /ly/_search
{
"_source": {
"includes":["title","price"]
},
"query": {
"term": {
"price": 2699
}
}
}
GET /ly/_search
{
"_source": {
"excludes": ["images"]
},
"query": {
"term": {
"price": 2699
}
}
}
布尔组合(bool):
bool
把各种其它查询通过must
(与)、must_not
(非)、should
(或)的方式进行组合
GET /heima/_search
{
"query":{
"bool":{
"must": { "match": { "title": "大米" }},
"must_not": { "match": { "title": "电视" }},
"should": { "match": { "title": "手机" }}
}
}
}
结果:
范围查询(range):
range
查询找出那些落在指定区间内的数字或者时间
GET /heima/_search
{
"query":{
"range": {
"price": {
"gte": 1000.0,
"lt": 2800.00
}
}
}
}
结果:
模糊查询(fuzzy):
fuzzy
查询是 term
查询的模糊等价。它允许用户搜索词条与实际词条的拼写出现偏差,但是偏差的编辑距离不得超过2:
GET /ly/_search
{
"query": {
"fuzzy": {
"title": "appla"
}
}
}
我们可以通过fuzziness
来指定允许的编辑距离:
GET /ly/_search
{
"query": {
"fuzzy": {
# 文末java面试题,进阶技术大纲,架构资料分享
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份**PDF文档**
**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**
* **第一个要分享给大家的就是算法和数据结构**
![网易严选Java开发三面面经:HashMap+JVM+索引+消息队列](https://img-blog.csdnimg.cn/img_convert/9085dbf8d9d275eab39204ef48a2562a.png)
* **第二个就是数据库的高频知识点与性能优化**
![网易严选Java开发三面面经:HashMap+JVM+索引+消息队列](https://img-blog.csdnimg.cn/img_convert/23104399982cb3c920db299e13670822.png)
* **第三个则是并发编程(72个知识点学习)**
![网易严选Java开发三面面经:HashMap+JVM+索引+消息队列](https://img-blog.csdnimg.cn/img_convert/a31ea1be7fdbd3b8ffdb3f1de0efc0d7.png)
* **最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料**
![网易严选Java开发三面面经:HashMap+JVM+索引+消息队列](https://img-blog.csdnimg.cn/img_convert/b8aba59aff00f39f817182f3e1ea3555.png)
ermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0x6eTQxMDk5Mg==,size_16,color_FFFFFF,t_70)
**模糊查询(fuzzy):**
`fuzzy` 查询是 `term` 查询的模糊等价。它允许用户搜索词条与实际词条的拼写出现偏差,但是偏差的编辑距离不得超过2:
GET /ly/_search
{
“query”: {
"fuzzy": {
"title": "appla"
}
}
}
我们可以通过`fuzziness`来指定允许的编辑距离:
GET /ly/_search
{
“query”: {
"fuzzy": {
文末java面试题,进阶技术大纲,架构资料分享
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档
CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】
- 第一个要分享给大家的就是算法和数据结构
[外链图片转存中…(img-l4nUbbQq-1630633891557)]
- 第二个就是数据库的高频知识点与性能优化
[外链图片转存中…(img-elO4s4PZ-1630633891559)]
- 第三个则是并发编程(72个知识点学习)
[外链图片转存中…(img-AyLK9mD6-1630633891560)]
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
[外链图片转存中…(img-SKLYVnfV-1630633891562)]
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来