
目录
什么是Elasticsearch?
安装
验证安装
按装图形化界面Kibana
安装
验证安装
ES中常见的概念
ES常用API接口
基本操作
创建索引
创建索引并往索引中添加一条文档
创建索引但不指定id
创建索引指定数据类型
删除索引
查询有哪些索引
文档
添加文档(记录)
查询文档
删除文档
修改文档
按条件查询
查询所有文档
根据指定条件搜索
将查询的条件封装成json数据
指定列名和值查询
只查询部分列
分页查询
查询指定范围的
查询并排序
多条件查询
and
or
取反
高亮显示
The Elastic Stack, 包括 Elasticsearch【搜索,分析】、 Kibana【可视 化】、 Beats 和 Logstash【数据的搜集】(也称为 ELK Stack)。能够安 全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、 分析和可视化。 Elaticsearch,简称为 ES, ES 是一个开源的高扩展的分布式全文搜索引 擎, 是整个 ElasticStack 技术栈的核心。 它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台 服务器,处理 PB 级别的数据。
安装很简单,下载好压缩包后,解压运行就可以了
解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务 。
注意: 9300 端口为 Elasticsearch 集群间组件的通信端口, 9200 端口为 浏览器访问的 http协议 RESTful 端口。
Elasticsearch是专门用来作搜索的,图形化界面需要安装kibana,他是es数据的前端展现,数据分析时,可以方便地看到数据。作 为开发人员,可以方便访问es。
他的安装也很简单,下载完毕后,解压后直接运行。
验证安装解压后进入in目录
访问5601端口
Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。
ES 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当 于表的行。这里 Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一 个 index 下已经只能包含一个type, Elasticsearch 7.X 中, Type 的概念已 经被删除了。
将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比
PUT /索引名称/类型名称/1
{
文档(数据)
}PUT /test/demo/1
{
"name":"张三",
"age":15
}
POST /test2/demo
{
"name":"李四",
"age":45
}
PUT /test3
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"age":{
"type": "integer"
}
}
}
}
相当于删除数据库
DELETe /索引名
查询用GET,部分get命令
相当查询所有表
GET _cat/indices
查询详细信息
GET _cat/indices?v
查询索引结构,相当于查看表节构
GET /索引名
使用put添加
使用put添加必须指定id值
注意使用put添加记录可以说是覆盖,他会之前的记录
使用post添加
这就不用指定id值了
使用post添加字段的话需要指定id,但他和put基本一样,也是覆盖,上面的添加完毕生成了id,取到id进行操作。
查询指定索引
GET /索引/类型/id
相当于删除一条记录
DELETE /索引/类型/id
修改和上面的添加一样,只是这里处理一下上面的修改就覆盖原来的字段的bug
POST /test4/demo/1/_update
{
"doc":{
"name":"王五"
}
}
GET /索引/类型/_search
GET /索引/类型/_search?q=条件
可以模糊查询
GET /test4/demo/_search?q=王
类型可省去,默认为_doc,
query后的值有:
match:匹配
range:范围匹配
term:精准匹配
GET /索引/类型/_search
{
"query": {
"match": {
"name": "王"
}
}
}
GET /test4/_search
{
"query": {
"match": {
"name": "王"
}
},
"_source":["sex","name"]
}
GET /test4/_search
{
"query": {
"match": {
"name": "王"
}
},
"_source":["sex","name"],
"from": 0,
"size": 1
}
GET /test4/_search
{
"query": {
"range": {
"age":{
"gt":3
}
}
},
"_source":["sex","name","age"],
"from": 0,
"size": 6
}
GET /test4/_search
{
"query": {
"range": {
"age":{
"gt":3
}
}
},
"_source":["sex","name","age"],
"from": 0,
"size": 6,
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
must:等同于sql中的and
should:等同于sql中的or
must_not:等同于sql中的!
GET /test4/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "王"
}
},
{
"match": {
"age": "5"
}
}
]
}
}
}
GET /test4/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "王"
}
},
{
"match": {
"age": "5"
}
}
]
}
}
}
GET /test4/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"name": "王"
}
}
]
}
}
}
GET /test4/_search
{
"query": {
"match": {
"name": "王"
}
},
"highlight": {
"fields": {
"name": {}
}
}
}
分词搜索 Test和keyword类型区别GET /test4/_search
{
"query": {
"match": {
"name": "王"
}
},
"highlight": {
"pre_tags": "",
"post_tags": "",
"fields": {
"name": {}
}
}
}
text:它会为该字段的内容进行拆词操作,并放入倒排索引表中
keyword:它不会进行拆词操作
使用match匹配查询---对匹配的关键字进行拆词操作,并和倒排索引表中对应。
使用term精准匹配---它不会对关键字进行拆词操作,而且把关键字作为一个整体和倒排索引表进行匹配