首页 > 其他分享 >ElasticSearch系列---【Es的快速入门文档】

ElasticSearch系列---【Es的快速入门文档】

时间:2022-12-25 11:32:10浏览次数:67  
标签:name GET age --- ik ElasticSearch user student Es

Es的快速入门文档

1.对比数据库理解

ElasticSearch系列---【Es的快速入门文档】_elasticsearch

ElasticSearch是面向文档型数据库,一条数据在这里就是一个文档。

 注意:从ElasticSearch6.X开始,一个Index下只能包含一个Type,因此,在ElasticSearch7.X及之后的版本已经删除了Type的概念。

2.倒排索引

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_02

 在关系型数据库中,我们经常通过索引找内容,但是在全文检索的场景中,关系型数据库通过like来逐行实现全文检索,数据量上来之后,显然不太现实。所以这时候就诞生了倒排索引,通过关键词建立索引,然后关联文档编号(id),通过关键词的匹配权重(score)来对文档进行排序。

3.IK分词器

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

找到和es一样的版本,这里我用的es为7.13.4,ik也选7.13.4版本。

ElasticSearch系列---【Es的快速入门文档】_数据_03

下载之后传到服务器上,创建ik文件夹,解压到ik目录下。创建Dockerfile文件,内容如下:

FROM elasticsearch:7.13.4
ADD ik /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik

ElasticSearch系列---【Es的快速入门文档】_数据_04

 如上图,含有ik分词器的es镜像已制作好。替换原来的镜像,重启es即可。

若使用的KubeSphere部署的es,参考下图:

ElasticSearch系列---【Es的快速入门文档】_分词器_05

 重启之后,验证ik分词器是否安装好了,如下图,则说明已安装好。

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_06

 这里我以Kibana为例,我们知道,ik分词器提供了两个分词算法:分别为ik_smart(最少切分)和ik_max_word(最细粒度切分)。

我这里输入"少年攻城狮说Java",期望切分成,"少年攻城狮","爱","中华"。

ik_smart的切分结果:

ElasticSearch系列---【Es的快速入门文档】_数据_07

 ik_max_word的切分结果:

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_08

 两种算法对比后,发现"少年攻城狮"没有被切到一起,这说明ik分词器字典里没有"少年攻城狮"这个词,这时候对于这种定制化名词,我们就需要自己添加到ik分词器的字典里。

ElasticSearch系列---【Es的快速入门文档】_数据_09

 修改成功后,重新打镜像,替换原来的elasticsearch_ik:7.13.4镜像,重启es。

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_10

 如上图,显然,我们的字典已生效。

4.REST风格操作ES

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_11

常用数据类型

ElasticSearch系列---【Es的快速入门文档】_分词器_12

4.1.创建索引

第一种创建方式:类似设计表

PUT /test1
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "long"
},
"birthday": {
"type": "date"
}
}
}
}

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_13

第二种创建方式:默认识别类型

PUT /test2/_doc/1
{
"name": "少年攻城狮",
"age": 18,
"birth": "1998-02-16"
}

#查看索引库默认属性,确认字段类型的默认值
GET test2

ElasticSearch系列---【Es的快速入门文档】_分词器_14

 4.2.查看全部索引信息

GET _cat/indices?v

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_15

 4.3.修改文档数据(推荐)

这种修改,当字段没有传的时候,不会覆盖成null值。

POST /test2/_doc/1/_update
{
"doc": {
"name": "张无忌"
}
}

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_16

 4.4.删除索引

DELETE test

4.5.删除文档数据

DELETE test2/_doc/1

4.6.新增或修改文档数据(不推荐使用这种修改,推荐使用4.3的修改)

这个方法,存在就修改,不存在就新增,用这种方法做修改,少写了某个字段的时候,少写的字段的值会被赋上null值。

PUT /student/user/1
{
"name": "张三",
"age": 16,
"desc": "一顿操作猛如虎",
"tags": ["抽烟","喝酒"]
}

PUT /student/user/2
{
"name": "里斯",
"age": 18,
"desc": "天王盖地虎",
"tags": ["学习","喝酒"]
}

PUT /student/user/3
{
"name": "王五",
"age": 22,
"desc": "宝塔镇河妖",
"tags": ["旅游","喝酒"]
}

#根据id查看数据
GET /student/user/1

4.7.简单的查询

#根据id查询
GET /student/user/1
#_search代表查询操作,q代表查询条件
GET student/user/_search?q=name:张三

ElasticSearch系列---【Es的快速入门文档】_数据_17

 4.8.返回值只看指定列

GET student/user/_search
{
"query": {
"match": {
"name": "张三"
}
},
"_source": ["name","age"]
}

ElasticSearch系列---【Es的快速入门文档】_数据_18

 4.9.排序

ElasticSearch系列---【Es的快速入门文档】_数据_19

 4.10.分页

GET student/user/_search
{
"query": {
"match": {
"name": "张三"
}
},
"sort": [
{
"age": "desc"
}
],
"from": 0,
"size": 1
}

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_20

 4.11.And查询(must)

ElasticSearch系列---【Es的快速入门文档】_数据_21

 4.12.Or查询(should)

GET student/user/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "张三"
}
},
{
"match": {
"age": 18
}
}
]
}
}
}

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_22

 4.13.Not查询(must_not)

GET student/user/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"name": "张三"
}
},
{
"match": {
"age": 18
}
}
]
}
}
}

ElasticSearch系列---【Es的快速入门文档】_分词器_23

 4.14.范围查询(filter)

GET student/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "张三"
}
}
],
"filter": [
{
"range": {
"age": {
"gte": 18,
"lte": 23
}
}
}
]
}
}
}

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_24

 4.15.数组内多条件查询

GET student/user/_search
{
"query": {
"match": {
"tags": "喝酒 习"
}
}
}

ElasticSearch系列---【Es的快速入门文档】_elasticsearch_25

 4.16.精确查询多个值(term查询)

待完善

4.17.自定义高亮查询

GET student/_search
{
"query": {
"match": {
"name": "张三"
}
},
"highlight": {
"pre_tags": "<p style='color:red'>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}

ElasticSearch系列---【Es的快速入门文档】_数据_26

标签:name,GET,age,---,ik,ElasticSearch,user,student,Es
From: https://blog.51cto.com/u_15670038/5968037

相关文章

  • 段力辉版本《OpenCV-Python 中文教程》学习
          此书极好,值得借鉴学习,并且开源开放。Python在实现过程中,体现出来了非常强的优势,特别是结合Numpy来进行矩阵计算,有很多简化方法。这里将学习过程代码进行增编......
  • 计算机视觉与深度学习-前言
    基于cs231计算机视觉与深度学习CS231n:ConvolutionalNeuralNetworksforVisualRecognition​ –JustinJohnson&SerenaYeung&Fei-FeiLi​ –Focusingona......
  • linux网络编程-线程创建和退出
    线程创建函数:intpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg);第一个参数thread是出参,传出创建的线程......
  • cf1763 —F. Edge Queries
    F.EdgeQuerieshttps://codeforces.ml/contest/1763/problem/F题意n个点m条边的无向图,保证一个点不会存在多个连通分量中,q次询问,问对于从u到v的所有路径上的边,删掉一条......
  • x210-2022-12-24
    1、SD卡使用的是32G小卡,因为开发板是大卡卡槽,所以在小卡外加了一个大卡卡套,这张卡原来一直是用于串口屏烧录工程文件的,因为烧录串口屏时有容量要求,所以只分区了16G出来使用......
  • Selenium - Selenium IDE的安装与使用
    before SeleniumIDE的web录制功能一直深受测试人员的喜爱,能将我们的操作动作录制下来并且能保存成相应的代码。较为方便。目前来说啊,可以有三种情况选择:谷歌商店搜索​​s......
  • What's new in dubbo-go v3.0.4
    dubbogo社区发布了 ​​v3.0.4​​ ​​https://github.com/apache/dubbo-go/releases/tag/v3.0.4-rc1,本文列出相关重大​​feature、bugfix、性能提升项。1对接Pol......
  • ansible rhel-system-roles的出处和文档索引地址
    使用selinuxLinux系统管理的Ansible角色简介RHEL系统角色简介galaxylinux-system-roles......
  • 06-矩阵键盘
    #include"reg52.h"sfrP4=0xc0;sbitR1=P3^0;sbitR2=P3^1;sbitR3=P3^2;sbitR4=P3^3;sbitC4=P3^4;sbitC3=P3^5;sbitC2=P4^2;sbitC1=......
  • (二)elasticsearch 源码目录
    在阅读源码之前,我们先来看看整个项目的结构:(同(一)elasticsearch编译和启动,我们使用版本7.4.0作为示例).ci,持续集成配置.github,里面有PULL_REQUEST_TEMPLATE.md,是关于pr......