Elaticsearch基本使用,2021大厂Java面试经历

删除索引请求格式:

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_allmatchtermrange 等等

  • 查询条件:查询条件会根据类型的不同,写法也有差异,后面详细讲解

查询所有(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之间:

orand 间二选一有点过于非黑即白。 如果用户给定的条件分词后有 5 个查询词项,想查找只包含其中 4 个词的文档,该如何处理?我们如何获得处于中间的某种结果?

match 查询支持 minimum_should_match 最小匹配参数, 这让我们可以指定必须匹配的词项数用来表示一个文档是否相关。我们可以将其设置为某个具体数字,更常用的做法是将其设置为一个百分数,因为我们无法控制用户搜索时输入的单词数量:


GET /ly/_search

{

    "query":{

        "match":{

            "title":{

            	"query":"小米曲面电视",

            	"minimum_should_match": "75%"

            }

        }

    }

} 

结果:

在这里插入图片描述

多字段查询(multi_match):

multi_matchmatch类似,不同的是它可以在多个字段中查询


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全家桶等学习笔记这里就不一一列举出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值