本文已参与「新人创作礼」活动,一起开启掘金创作之路。
近期在工作中需要使用es进行简单的全文检索,所以最近都在边学边做笔记,也会把自己遇到的bug以及如何解决的,一并记录在这里,供大家学习参考。
概念
ElasticSearch是面向文档型的数据库,在这里一条数据就是一个文档。
关系型数据库和ElasticSearch客观对比:
| MySQL | ElasticSearch |
|---|---|
| Database(数据库) | Index(索引) |
| Table(表) | Type(类型) |
| Row(行) | Documents(文档) |
| Column(列) | Fields(字段) |
ElasticSearch (集群) 中可以包含多个索引(数据库) ,每个索引中可以包含多个类型(表) ,每个类型下又包含多个文档(行) ,每个文档中又包含多个字段(列) 。
索引操作
1、创建索引,添加数据
POST /test_user/_doc/1
{
"name":"zhangsan",
"age":6
}
2、字段数据类型
-
字符串类型
-
text、keyword
- text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;
- keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
-
-
数值型
- long、Integer、short、byte、double、float、half float、scaled float
-
日期类型
- date
-
te布尔类型
- boolean
-
二进制类型
- binary
-
等等… 3、指定字段的类型(使用PUT)
PUT /test2
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age":{
"type": "long"
},
"birthday":{
"type": "date"
}
}
}
}
4、查询索引规则
GET test_user
扩展:通过get _cat/ 可以获取ElasticSearch的当前的很多信息!
GET _cat/indices
GET _cat/aliases
GET _cat/allocation
GET _cat/count
GET _cat/fielddata
GET _cat/health
GET _cat/indices
GET _cat/master
GET _cat/nodeattrs
GET _cat/nodes
GET _cat/pending_tasks
GET _cat/plugins
GET _cat/recovery
GET _cat/repositories
GET _cat/segments
GET _cat/shards
GET _cat/snapshots
GET _cat/tasks
GET _cat/templates
GET _cat/thread_pool
5、修改
- 使用put覆盖原来的值
- 版本+1
- 如果漏掉了某个字段,会被更新成没有写的字段,会消失
// 修改会有字段丢失
PUT /test_user/_doc/1
{
"name" : "李四"
}
- 使用post的update
- version不会改变
- 不会丢失字段
POST /test_user/_doc/1/_update
{
"doc":{
"name" : "lisisa",
"age" : 2
}
}
6、删除索引
DELETE /test_user
7、简单查询
GET /test_user/_search?q=name:lisis