Elasticsearch快速入门

文章目录

Elasticsearch快速入门

核心概念

Elasticsearch是面向文档的,以json格式存储数据的NoSQL数据库,也是一个全文搜索引擎。

Elasticsearch 关系型数据库(如Mysql)
索引(Index) 数据库(Database)
类型(Type) 表(Table)
文档(Document) 行,记录(Row,Record)
字段(Field) 列,字段(Column,Field)
映射(Mapping) 约束(Schema)

注意:es中的类型在es7.x版本中已经没有,在后面的8.x版本中被彻底删除掉。

倒排索引

倒排索引(Inverted Index),是Elasticsearch中的索引工作机制。倒排索引是区别于正排索引的概念:

  • 正排索引:是以文档对象的唯一ID作为索引,以文档内容作为记录。
  • 倒排索引:指的是将文档内容中的单词作为索引,将包含该词的文档ID作为记录。

Elasticsearch的工作流程如下,因为使用倒排索引产生的文档记录要比mysql数据行少多了,所以会比较快。

基本使用

es提供了retfulAPI风格操作接口给开发者对索引、类型、文档、字段、映射等进行增删查改操作。

索引操作
创建索引

请求格式:

json 复制代码
PUT /索引名称
类型映射[了解]

相当于在mysql中创建数据表时的字段类型

json 复制代码
# 索引名称必须已经存在!
POST /索引名称/类型名称
{
    "类型名称": { // 映射的类型名称
        "properties": {  // 索引中文档的属性
            "字段名": {           // 属性名或字段名
                "type": "text"   // 属性值类型或字段类型,text表示文本,如商品标题
                "index": "analyzed",    // 索引类型
                "analyzer": "ik_smart"  // 设置使用的分词器[标准分词]
            },
            "字段名": {           // 属性名或字段名
                "type": "text"   // 属性值类型或字段类型,text表示文本,如商品标题
                "index": "analyzed",    // 索引类型
                "analyzer": "standard"  // 设置使用的分词器
            },
            "字段名": {           // 属性名或字段名
                "type": "text"   // 属性值类型或字段类型,text表示文本,如商品标题
                "index": "analyzed",    // 索引类型
                "analyzer": "standard"  // 设置使用的分词器
            }
        }
    }
}

kinana操作:

json 复制代码
POST /indexes1/goods
{
  "mapping": {
    "properties": {
      "id": {
        "type": "long"
      },
      "name": {
        "type": "text",
        "index": "analyzed",
        "analyzer": "ik_max_word"
      },
      "price":{
        "type": "float"
      },
      "created_time":{
          "type": "date",
          "format":"yyyy-MM-dd HH:mm:ss"
      }
    }
  }
}
数据类型[了解]

elasticsearch中支持的常见字段数据类型:

类型 描述
text 字符串类型,可以模糊查询, 可以分词查询,不能聚合、排序
keyword 字符串类型,只能精准查询, 不能分词查询,可以聚合、排序
long 有符号的64位整数, 范围:[−2^63^ ~ 2^63^-1]
Integer 有符号的32位整数, 范围: [−2^31^ ~ 2^31^-1]
short 有符号的16位整数, 范围: [-32768 ~ 32767]
byte 有符号的8位整数, 范围: [-128 ~ 127]
float 32位单精度浮点数
double 64位双精度浮点数
boolean 布尔类型,支持使用字符串,数字等零值表示true/false
date 日期类型,
date_nanos 日期纳秒类型,
binary 二进制类型,Base64编码字符串的二进制值
Range 范围类型,有integer_range, float_range, long_range, double_range, date_range等
array 数组类型,ES中没有专门的数组类型, 直接使用[ ]定义即可,所有的成员的值必须是同一种数据类型
object 对象类型,以json对象为结构

使用默认类型_doc代替映射的创建,es会内部自动推断字段类型。

json 复制代码
PUT /indexes2/_doc/文档ID
{
    "name": "商品的标题",
    "price": 18,
    "created_time": "2022-01-10 22:00:31"
}

_doc 就是默认类型(default type),type在8.x版本会被彻底删除,以后使用默认类型_doc替代即可。

查看索引
bash 复制代码
GET /_cat/indices      # 查看所有的索引信息
GET /索引名称           # 查看指定名称的索引信息
删除索引
json 复制代码
DELETE /索引名称
文档操作
请求方法/method uri地址 描述
PUT(创建,修改) /索引名称/_doc/文档id 创建文档(指定文档id)
POST(创建) /索引名称/_doc/文档id 创建文档,如果uri地址只是以_doc结尾,文档id是随机生成的)
POST(修改) /索引名称/_doc/文档id/_update 修改文档
DELETE(删除) /索引名称/_doc/文档id 删除文档
GET(查询) /索引名称/_doc/文档id 查询文档通过文档ID
POST(查询) /索引名称/_doc/文档id/_search 查询所有数据
添加文档
bash 复制代码
POST /索引名称/_doc
{
	"id": 1,
    "name": "华为手机",
    "category": "华为",
    "cover": "1.png",
    "price": "3999.00"
}
修改文档
bash 复制代码
POST /索引名称/_doc/1
{
    "name": "华为手机mate40",
    "price": "4999.00"
}
删除文档
bash 复制代码
DELETE /索引名称/_doc/1
查询文档

查询文档有三种方式:

  • 主键查询:根据文档id查询
  • 精确查询:根据关键词查询,也叫term查询 浪潮之巅 -> 浪潮之巅
  • 匹配查询:根据输入的内容先对内容进行分词,再进行分词匹配查询 浪潮 -> 浪潮之巅
准备数据
bash 复制代码
POST /indexes4/_doc/1
{
  "created_time":"2022-04-01",
  "title":"浪潮之巅",
  "content":"一部IT人非读不可,而非IT人也应该阅读的作品,讲故事的经典作品",
  "author_id": 119
}

POST /indexes4/_doc/2
{
  "post_date":"2022-03-12",
  "title":"人月神话",
  "content":"一部IT人非读不可,而非IT人也应该阅读的作品,讲人与团队关系作品",
  "author_id": 120
}

POST /indexes4/_doc/3
{
  "post_date":"2021-12-16",
  "title":"代码之髓",
  "content":"小日子过得不错的人写的作品,对代码中各种语言结构的实现进行揭秘",
  "author_id": 110
}
主键查询
bash 复制代码
# GET /索引名称/_doc/1
GET /indexes4/_doc/3
精确查询
json 复制代码
POST /索引名称/_search

{
	"query": {
		"term": {
			"字段名": {
			    "value": "字段值"
			},
			"字段名": {
			    "value": "字段值"
			}
		}
	}
}

# 如果是text格式,无法精确查询的,只能匹配查询

kibana操作:

bash 复制代码
POST /indexes4/_search
{
	"query": {
		"term": {
			"author_id": {
			    "value": 119
			}
		}
	}
}
匹配查询

查询所有

bash 复制代码
POST /索引名称/_search
{
    "query": {
        "match_all": {}
     },
     "sort": [  # 排序,注意:text无法使用排序,keyword才支持
          # {"字段名":"排序规则,asc正序, desc倒序"}
          {"title": "asc" }
     ],
      "from": 0,                       # 分页,查询起始下标
      "size": 2,                       # 指定返回结果数量
      "_source": ["title", "content"]  # 指定只返回部分字段
}

kibana操作:

bash 复制代码
POST /indexes4/_search
{
  "query": {
    "match_all": {}
  },
  "sort": {
    "author_id": "desc"
  },
  "from": 0,
  "size": 4,
  "_source": ["title"]
}

条件查询

格式:

json 复制代码
POST /索引名称/_search
{
    "query": {
        "match": {
          "字段名": "查询条件值"
        }
    }
}
bash 复制代码
POST /indexes4/_search
{
    "query": {
        "match": {
          "content": "非读不可"
        }
    }
}

若有错误与不足请指出,关注DPT一起进步吧!!!

相关推荐
一颗去去6 小时前
实用的Git工作流程
大数据·git·elasticsearch
iceggy6 小时前
elasticSearch常见命令及历史数据迁移
大数据·elasticsearch·搜索引擎·数据迁移
月光code12 小时前
Elasticsearch 启动后在浏览器输入http://localhost:9200 访问失败
大数据·http·elasticsearch
菜到极致就是渣17 小时前
ElasticSearch的搜索方式
大数据·elasticsearch·搜索引擎
不能放弃治疗18 小时前
重生之我们在ES顶端相遇第16 章 - Lucene 写入流程
elasticsearch
菜到极致就是渣1 天前
Elasticsearch自动补全如何实现
java·elasticsearch·搜索引擎
笑的像个child1 天前
ElasticSearch学习笔记
笔记·学习·elasticsearch
会说话的小鱼1 天前
[6]Opengl ES预览摄像头
大数据·elasticsearch·搜索引擎
bigbig猩猩1 天前
Elasticsearch的实战应用
大数据·elasticsearch·jenkins