ElasticSearch简单使用

ElasticSearch(windows)安装

1.下载windows版本下载解压
在这里插入图片描述2. 双击bin目录下的elasticsearch.bat
在这里插入图片描述启动成功
在这里插入图片描述3.访问http://127.0.0.1:9200/
![在这里插入图片描述](https://img-blog.csdnimg.cn/b9eed4bea9734b7794744d013f5e8c5c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASUQt6IOk55yf,size_20,color_FFFFFF,t_70,g_se,x_16

ES head安装

1、下载:https://github.com/mobz/elasticsearch-head/
2、安装下载的ES head解压即可
在这里插入图片描述3.ES head启动
ES head是vue项目启动需要安装node.js
进入到解压后的ES head目录D:\soft\ES\elasticsearch-head-master
在路径出输入cmd
在这里插入图片描述

运行命令:npm install

在这里插入图片描述

运行命令:npm run start

启动成功
在这里插入图片描述
4.运行ES head
浏览器输入:http://127.0.0.1:9100/
在这里插入图片描述5.解决 集群健康值: 未连接 问题

打开elasticsearch的config目录修改elasticsearch.yml文件
在这里插入图片描述在文件末尾加入

http.cors.enabled: true
http.cors.allow-origin: "*"

重启ElasticSearch服务再次连接
在这里插入图片描述

Kibana 安装

kibanna下载:https://www.elastic.co/cn/kibana
Kibana 版本要和 ElasticSearch 一致
安装:解压下载压缩包
在这里插入图片描述启动:双击bin目录下的kibana.bat
在这里插入图片描述在这里插入图片描述

访问地址:http://localhost:5601
在这里插入图片描述进入开发工具
在这里插入图片描述在这里插入图片描述kibana汉化
修改kibana->config目录下的kibana.yml文件在这里插入图片描述讲i18n.locale:“en” 改为 i18n.locale: “zh-CN”
在这里插入图片描述

ES 核心概念

1、索引

2、字段类型(mapping)

3、文档(documents)

Elasticsearch 是面向文档,一切皆JSON对象

关系行数据库Elasticsearch
数据库(database)索引(indices)
表(tables)types
行(rows)documents
字段(columns)fields

Elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多 个文档(行),每个文档中又包含多个字段(列)

物理设计:
Elasticsearch 在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移一个人就是一个集群!默认的集群名称就是 elaticsearh
在这里插入图片描述
逻辑设计:
一个索引类型中,包含多个文档,比如说文档 1,文档 2。 当我们索引一篇文档时,可以通过这样的一各顺序找到 它:索引 ▷ 类型 ▷ 文档 ID ,通过这个组合我们就能索引到某个具体的文档。 注意:ID 不必是整数,实际上它是个字 符串。

文档
就是我们的一条条数据

类型
尽管我们可以随意的新增或者忽略某个字段,但是,每个字段的类型非常重要,比如一个年龄字段类型,可以是字符 串也可以是整形。因为 elasticsearch 会保存字段和类型之间的映射及其他的设置。这种映射具体到每个映射的每种类型,这也是为什么在 elasticsearch 中,类型有时候也称为映射类型。
类型是文档的逻辑容器,就像关系型数据库一样,表格是行的容器。 类型中对于字段的定义称为映射,比如 name 映 射为字符串类型。 我们说文档是无模式的,它们不需要拥有映射中所定义的所有字段

索引
索引就是就是数据库,索引是映射类型的容器,elasticsearch 中的索引是一个非常大的文档集合。索引存储了映射类型的字段和其他设置。 然后它们被存储到了各个分片上了。

节点和分片 如何工作
一个集群至少有一个节点,而一个节点就是一个 elasricsearch 进程,节点可以有多个索引默认的,如果你创建索引,那么索引将会有个 5 个分片 ( primary shard ,又称主分片 ) 构成的,每一个主分片会有一个副本 ( replica shard ,又称复制分片 )

倒排索引
elasticsearch 使用的是一种称为倒排索引的结构,采用 Lucene 倒排索作为底层。这种结构适用于快速的全文搜索, 一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表

原始数据

文档id标签
1mysql
2oracle
3mysql
4mysql, oracle

倒排索引

标签文档id
mysql1,3,4
oracle2

IK 分词器插件

下载:https://github.com/medcl/elasticsearch-analysis-ik
安装:解压
在这里插入图片描述讲解压后的整个目录放到ElasticSearch的plugins目录下

在这里插入图片描述重新启动ElasticSearch

运行命令elasticsearch-plugin list 查看加载的插件
elasticsearch-plugin 可以通过这个命令来查看加载进来的插件
lib目录下开启cmd
在这里插入图片描述ik_smart :最少切分

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "中华人民共和国"
}

在这里插入图片描述
ik_max_word :最细粒度划分

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "中华人民共和国"
}

在这里插入图片描述ik 分词器增加自定义词典
打开ik分词器插件的config目录
在这里插入图片描述新建self_dic.dic文件
在这里插入图片描述在self_dic.dic 中加入词语
在这里插入图片描述

在IKAnalyzer.cfg.xml文件中配置刚刚新建的self_dic.dic
在这里插入图片描述
在这里插入图片描述重启ElasticSearch服务

然后在kibana中的Dev Toos中测试

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "鲁班七号发起进攻留半路上了"
}

在这里插入图片描述
Rest 风格说明

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

基本 Rest 命令说明:

methodurl地址描述
PUTlocalhost:9200/索引名称/类型名称/文档 id创建文档(指定文档 id)
POSTlocalhost:9200/索引名称/类型名称创建文档(随机文档 id)
POSTlocalhost:9200/索引名称/类型名称/文档 id/_update修改文档
DELETElocalhost:9200/索引名称/类型名称/文档 id删除文档
GETlocalhost:9200/索引名称/类型名称/文档 id查询文档通过文档 id
POSTlocalhost:9200/索引名称/类型名称/_search查询所有数据

1、创建一个索引

命令:
PUT /索引名/~类型名~/文档id
{请求体}

示例:
PUT /index1/type1/1
{
  "name": "Shurikey",
  "age": 30
}

在这里插入图片描述在这里插入图片描述在这里插入图片描述2、指定字段的类型

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

在这里插入图片描述在这里插入图片描述可以通过 GET 请求获取具体的类型数据
在这里插入图片描述修改 使用 PUT 也可以, 相同会覆盖

PUT /index1/type1/1
{
  "name": "Shurikey",
  "age": 30,
  "birthday": "1998-08-25"
}

在这里插入图片描述覆盖了之前的数据多了两个字段
在这里插入图片描述不相同新增

PUT /index1/type1/2
{
  "name": "Shurikey2",
  "age": 31,
  "birthday": "1920-08-24"
}

在这里插入图片描述在这里插入图片描述使用POST方法更新

POST /index1/type1/1/_update
{
  "doc": {
    "name": "鲁班七号"
  }
}

在这里插入图片描述在这里插入图片描述
删除索引

DELETE index1

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

文档操作

1.添加数据

PUT /index1/user/1
{
	"name": "李元芳",
	"company": "百度",
	"tags": ["JAVA","大数据","前端"]
}

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

2.获取数据

GET /index1/user/1

在这里插入图片描述

3.修改数据(POST _update , 推荐使用这种更新方式!)

POST /index1/user/1/_update
{
  "doc": {
    "name": "鲁班七号"
  }
}

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

4.获取数据

同伙id获取数据:
GET kuangshen/user/1

根据规则查询:
GET /index1/user/_search?q=name:鲁班七号

模糊查询:
GET /index1/user/_search
{
  "query": {
    "match": {
      "name": "鲁班七"
    }
  }
}

在这里插入图片描述

5.数据结果字段选择

GET /index1/user/_search
{
  "query": {
    "match": {
      "name": "鲁班七"
    }
  },
  "_source": ["name"]
}

在这里插入图片描述

6.排序

按照age字段降序排列
GET /index1/user/_search
{
  "query": {
    "match": {
      "name": "鲁班七"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

在这里插入图片描述

7.分页查询

GET  index1/user/_search
from:从第几页开始
size:每页显示多少条
{
  "query": {
    "match": {
      "name": "鲁班七"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 10
}

在这里插入图片描述

8.多条见查询

must 相当于and
GET  index1/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "鲁班7"
          }
        },{
          "match": {
            "age": 30
          }
        }
      ]
    }
  }
}

在这里插入图片描述

should相当于and
GET  index1/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "鲁班7"
          }
        },{
          "match": {
            "age": 28
          }
        }
      ]
    }
  }
}

在这里插入图片描述

must_not相当于not
GET  index1/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "name": "鲁班7"
          }
        },{
          "match": {
            "age": 28
          }
        }
      ]
    }
  }
}

在这里插入图片描述

过滤器 filter
gt 大于
gte 大于等于
lt 小于
lte 小于等于!

GET  index1/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "鲁班7"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 10,
            "lte": 30
          }
        }
      }
    }
  }
}

在这里插入图片描述

匹配多个条件
GET  index1/user/_search
{
  "query": {
    "match": {
      "tags": "JAVA 数据"
    }
  }
}

在这里插入图片描述

9. 精确查询

term 查询是直接通过倒排索引指定的词条进程精确查找的

  • term ,直接查询精确的
  • match,会使用分词器解析!(先分析文档,然后在通过分析的文档进行查询!)

新建一个索引

PUT testdb
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "desc": {
        "type": "keyword"
      }
    }
  }
}

添加数据

PUT testdb/_doc/1
{
  "name": "不知火舞",
  "desc": "他是一个法师"
}

PUT testdb/_doc/2
{
  "name": "李元芳",
  "desc": "他是一个射手"
}

查看分词

GET _analyze
{
  "analyzer": "keyword",
  "text": ["李元芳 name"]
}

GET _analyze
{
  "analyzer": "standard",
  "text": ["李元芳 name"]
}

查询数据

GET testdb/_search
{
  "query": {
    "term": {
      "name": "不"
    }
  }
}

GET testdb/_search
{
  "query": {
    "term": {
      "desc": "他是一个射手"
    }
  }
}

多个值匹配精确查询

GET testdb/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
              "name": "不知火舞"
          }
        },{
          "term": {
              "desc": "他是一个法师"
          }
        }
      ]
    }
  }
}

10.高亮查询

GET testdb/_search
{
  "query": {
    "match": {
      "name": "不知火舞"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}

在这里插入图片描述自定义高亮标签

GET testdb/_search
{
  "query": {
    "match": {
      "name": "不知火舞"
    }
  },
  "highlight": {
    "pre_tags": "<span class='key' style='color:red'>", 
    "post_tags": "</span>", 
    "fields": {
      "name": {}
    }
  }
}

在这里插入图片描述

集成 SpringBoot

1.引入高级原生依赖

<dependency>
	<groupId>org.elasticsearch.client</groupId>
	<artifactId>elasticsearch-rest-high-level-client</artifactId>
	<version>7.6.2</version>
</dependency>

或者在创建项目是勾选
在这里插入图片描述然后修改版本

<properties>
	<java.version>1.8</java.version>
	<!--自定义es版本依赖,保证和本地一样-->
	<elasticsearch.version>7.6.1</elasticsearch.version>
</properties>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值