ElasticSearch 简介及基本操作

简介

什么是ElasticSearch

ElasticSearch 简称 ES ,是基于Apache Lucene构建的开源搜索引擎,是当前最流行的企业级搜索引擎Lucene本身就可以被认为迄今为止性能最好的一款开源搜索引擎工具包,但是lucene的API相对复杂,需要深厚的搜索理论。很难集成到实际的应用中去。ES是采用java语言编写,提供了简单易用的RestFul API,开发者可以使用其简单的RestFul API,开发相关的搜索功能,从而避免lucene的复杂性

核心概念

索引

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个商品数据的索引,一个订单数据的索引,还有一个用户数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。

映射

映射是定义一个文档和它所包含的字段如何被存储和索引的过程。在默认配置下,ES可以根据插入的数据自动地创建mapping,也可以手动创建mapping。 mapping中主要包括字段名、字段类型等

文档

文档是索引中存储的一条条数据。一条文档是一个可被索引的最小单元。ES中的文档采用了轻量级的JSON格式数据来表示。

基本操作

索引

  1. ES中的索引存在健康状态:green(健康)、yellow(索引可用,存在风险)、red(索引不可用)
  2. 默认ES在创建索引时会为索引创建1个备份索引和一个primary索引

创建

1.创建索引

PUT /索引名

⚠️注意

  • 默认ES在创建索引时会为索引创建1个备份索引和一个primary索引
  • 默认是yellow

2.创建索引 进行索引分片的配置

PUT /goods
{
  "settings": {
    "number_of_shards": 1, 
    "number_of_replicas": 0 
  }
}
  • 此时索引状态就是green

⚠️Notice:

ElasticSearch5.x以上版本使用text和keyword作为字符串类型取代之前版本的string类型。

  • 字符串 - text:用于全文索引,该类型的字段将通过分词器进行分词,最终用于构建索引
  • 字符串 - keyword:不分词,只能搜索该字段的完整的值,只用于 filtering

如果创建了索引但是没设置映射结果,然后插入了一条字符串类型的文档,字段将默认被同时映射成textkeyword类型

POST /test/_doc
{
  "name":"黄凯宇"
}

ElasticSearch将会为你默认创建映射

{
    
    
  "test" : {
    
    
    "mappings" : {
    
    
      "properties" : {
    
    
        "name" : {
    
    
          "type" : "text",
          "fields" : {
    
    
            "keyword" : {
    
    
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

基于这个映射你即可以在Filed字段上进行全文搜索, 也可以通过Filed.keyword字段实现不分词的关键词搜索及数据聚合.

查询

GET /_cat/indices?v

删除

DELETE /索引名
DELETE /*     #  *代表通配符,代表所有索引

映射

指定索引中字段名和字段类型,一般真实开发环境中都是手动创建映射,更加符合业务场景

创建

  • 字符串类型:keyword(关键字,关键字)、text(一段文本)
  • 数字类型: integer long
  • 小数类型:float double
  • 布尔类型:boolean
  • 日期类型:date
PUT /products
{
  "settings": {
    "number_of_replicas": 0,
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "id":{
        "type": "integer"
      },
      "title":{
        "type": "keyword"
      },
      "price":{
        "type": "double"
      },
      "create_at":{
        "type": "date"
      },
      "description":{
        "type": "text"
      }
    }
  }
}
  

查询

查询某个索引的映射

GET /索引名/_mapping

文档

添加

添加文档操作_—_手动指定 _id

POST /products/_doc/1
{
  "id":1,
  "title":"小浣熊",
  "price":0.5,
  "created_at":"2022-04-08",
  "description":"小浣熊真好吃"
}

自动生成_id

#添加文档操作 自动生成id  pD5UB4ABiB8dDekOnyy9
POST /products/_doc/
{
  "id":2,
  "title":"猪猪侠",
  "price":0.5,
  "created_at":"2022-04-08",
  "description":"5毛钱一包"
}

查看

基于id查询

GET /索引名/_doc/id

删除

基于id删除

DELETE /索引名/_doc/id

更新

删除原始文档 再重新添加(更新完就只剩更新的字段了)

PUT /索引名/_doc/id
{
   "字段名":"更新后值"
}

在原来的基础上更新文档

POST  /索引名/_doc/id/_update
{
	"doc":{
		"字段名":"更新后值"
	}
}

批量操作

  • 需要注意的是文档的内容不管多复杂都得在一行,不能换行

批量增加

POST /products/_doc/_bulk

{"index":{"_id":2}}
  {"id":2,"title":"泡面","price":4,"created_at":"2022-04-08","description":"泡面真难吃"}
{"index":{"_id":3}}
  {"id":3,"title":"玉米肠","price":5,"created_at":"2022-04-08","description":"玉米肠真好吃"}

批量 添加/更新/删除

POST /products/_doc/_bulk
{"index":{"_id":4}}
  {"id":4,"title":"沙拉","price":6,"created_at":"2022-04-09","description":"不错不错"}
{"update":{"_id":3}}
  {"doc":{"title":"玉米肠+蛋"}}
{"delete":{"_id":2}}

猜你喜欢

转载自blog.csdn.net/qq_50596778/article/details/125359768