Elasticsearch入门详解(API篇)

  • 时间:
  • 浏览:
  • 来源:互联网

Elasticsearch提供了Rest风格的API,即http请求接口

2.1基本概念

Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。
在这里插入图片描述
索引库(indices):indices是index的复数,代表许多的索引
类型(type):类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念
文档(document):存入索引库原始的数据。比如每一条商品信息,就是一个文档
字段(field):文档中的属性
映射配置(mappings):字段的数据类型、属性、是否索引、是否存储等特性

官网
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/index.html

2.2索引操作

2.2.1创建索引:put请求

使用kibana创建索引
请求方式:PUT
请求路径:索引库名
请求参数:json格式

put book
{
  "settings":{
    "number_of_shards":1,			/*分片数量*/
    "number_of_replicas":0			/*副本数量*/
  }
}

在这里插入图片描述
number_of_shards 是指索引要做多少个分片,只能在创建索引时指定,后期无法修改。
number_of_replicas 是指每个分片有多少个副本,后期可以动态修改
什么是分片?
ES中所存数据的文件块,也是数据的最小单元块。假如有2个分片,插入10条数据,默认,每个分片存5条。

2.2.2查看索引:get请求

get 索引库名
在这里插入图片描述在这里插入图片描述

2.2.3删除索引:delete请求

delete 索引库名
在这里插入图片描述

2.3映射配置

创建索引库,就相当于mysql创建“数据库”。接着我们来配置映射,相当于mysql创建“表结构”。
在ElasticSearch中,我们常配置:
字段的数据类型
是否要存储
是否要索引
是否分词
分词器是什么

2.3.1创建映射关系

PUT /索引库名/_mapping/类型名称
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true,
      "store": true,
      "analyzer": "分词器"
    }
  }
}

类型名称:基本概念中所说的type,类似于数据库中的表
字段名:类似于数据库中的列名。
type:类型,可以是text、keyword、long、short、date、integer、object等
index:是否索引,默认为true
store:是否存储,默认为false
analyzer:分词器,这里的ik_max_word即使用ik分词器

/* 1.先创建索引 */
put czxy

/* 2.创建映射关系 */
put czxy/_mapping/book
{
  "properties": {
    "title": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "images": {
      "type": "keyword",
      "index": "false"
    },
    "price": {
      "type": "float"
    }
    
  }
}

在这里插入图片描述

2.3.2查看映射关系

GET /索引库名/_mapping
在这里插入图片描述

2.3.3字段属性详解

1)type
Elasticsearch中支持的数据类型非常丰富
String类型,又分两种:
text修饰字符串,默认进行分词,并生成索引。不能用来过滤、排序和聚合等操作。
keyword修饰字符串,不会分词,不会建立索引。常常被用来过滤、排序和聚合。
Numerical:数值类型,分两类
基本数据类型:long、interger、short、byte、double、float、half_float
浮点数的高精度类型:scaled_float
需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
Date:日期类型
elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

2)index
index影响字段的索引情况。
true:字段会被索引,则可以用来进行搜索。默认值就是true
false:字段不会被索引,不能用来搜索

index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。

3)store
是否将数据进行额外存储。

Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做_source的属性中。而且我们可以通过过滤_source来选择哪些要显示,哪些不显示。

而如果设置store为true,就会在_source以外额外存储一份数据,多余,因此一般我们都会将store设置为false,事实上,store的默认值就是false。

2.4数据操作

2.4.1添加数据

语法:没有id

POST _index/_type/
{
  "属性": "值",
  ....
}

实例

POST czxy/book/
{
  "title": "标题",
  "price": 1234
}

在这里插入图片描述

2.4.2添加或更新数据

语法:数据存在更新;如果不存在添加(指定id)

PUT _index/_type/_id
{
  "属性": "值",
  ....
}

实例

PUT czxy/book/b001
{
  "title": "标题123",
  "price": 1234
}

在这里插入图片描述

2.4.3删除数据

语法:

DELETE _index/_type/_id

实例

DELETE czxy/book/b001

2.5查询操作

2.5.1简单查询

指定id查询

GET czxy/book/b001

指定id查询,检索指定内容

GET czxy/book/b001?_source=title,price

2.5.2高级查询

准备数据

PUT czxy2
PUT czxy2/_mapping/user
{
  "properties": {
    "username": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "city": {
      "type": "keyword"
    },
    "age": {
      "type": "float"
    }
  }
}


PUT czxy2/user/u001
{
  "username": "张三",
  "city": "山西",
  "age": 18
}

PUT czxy2/user/u002
{
  "username": "张四",
  "city": "山东",
  "age": 20
}

PUT czxy2/user/u003
{
  "username": "张三三",
  "city": "山东",
  "age": 22
}

查询所有
match_all:检索所有的数据

GET _search
{
  "query": {
    "match_all": {}
  }
}

查询指定索引的所有

GET czxy2/_search
{
  "query": {
    "match_all": {}
  }
}

查询部分结果

GET czxy2/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["username","city"]
}

条件查询:匹配查询

GET czxy2/_search
{
  "query": {
    "match": {
      "username": "张三"
    }
  }
}

条件查询:复合查询(多条件查询)
bool:多条件拼接
must:必须
must_not:不含
should:可有可无

GET czxy2/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "city": "山东"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": 22
          }
        }
      ]
    }
  }
}

should并集查询
注意:must和should同时存在的时候,should将会变得不起作用

GET czxy2/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "city": "山东"
          }
        },
        {
          "match": {
            "city": "山西"
          }
        }
      ]
    }
  }
}

精确匹配
term 进行精确匹配(数据要求:数字、日期、布尔、not_analyzed的字符串(未分词))

GET czxy2/_search
{
  "query": {
    "term": {
      "age": 2
    }
  }
}

范围查询
range 用于确定范围,gt 大于、lt 小于、gte大于等于、lte小于等于

ET czxy2/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 19,
        "lte": 21
      }
    }
  }
}

排序

GET czxy2/_search
{
  "query": {
    "match_all": {}
  }, 
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

分页查询
from 设置索引号,从0开始
size 设置每页个数

GET czxy2/_search
{
  "query": {
    "match_all": {}
  }, 
  "from": 0, 
  "size": 1
}

本文链接http://metronic.net.cn/metronic/show-16442.html