ElasticSearch核心概念

123 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

近期在工作中需要使用es进行简单的全文检索,所以最近都在边学边做笔记,也会把自己遇到的bug以及如何解决的,一并记录在这里,供大家学习参考。

概念

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

关系型数据库和ElasticSearch客观对比:

MySQLElasticSearch
Database(数据库)Index(索引)
Table(表)Type(类型)
Row(行)Documents(文档)
Column(列)Fields(字段)

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

索引操作

1、创建索引,添加数据

POST /test_user/_doc/1
{
  "name":"zhangsan",
  "age":6
}

image.png 2、字段数据类型

  • 字符串类型

    • text、keyword

      • text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;
      • keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
  • 数值型

    • long、Integer、short、byte、double、float、half floatscaled float
  • 日期类型

    • date
  • te布尔类型

    • boolean
  • 二进制类型

    • binary
  • 等等… 3、指定字段的类型(使用PUT)

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

4、查询索引规则

GET test_user

image.png

扩展:通过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、修改

  1. 使用put覆盖原来的值
    • 版本+1
    • 如果漏掉了某个字段,会被更新成没有写的字段,会消失
// 修改会有字段丢失
PUT /test_user/_doc/1
{
    "name" : "李四"
}

image.png

image.png

  1. 使用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

image.png