当前位置:   article > 正文

(Rest风格API)Elasticsearch索引操作、映射配置、数据操作、查询操作

(Rest风格API)Elasticsearch索引操作、映射配置、数据操作、查询操作

一、索引操作

1.使用kibana创建索引

1.请求方式:put

2.请求路径:索引库名

3.请求参数:json格式

  1. put book
  2. {
  3.   "settings":{
  4.     "number_of_shards":1, /*分片数量*/
  5.     "number_of_replicas":0 /*副本数量*/
  6.   }
  7. }

  1. number_of_shards 是指索引要做多少个分片,只能在创建索引时指定,后期无法修改。
  2. number_of_replicas 是指每个分片有多少个副本,后期可以动态修改
  3. 什么是分片?

ES中所存数据的文件块,也是数据的最小单元块。假如有2个分片,插入10条数据,默认,每个分片存5条。

2.查看索引:get请求

get 索引库名

我们可以使用*来查询所有索引库

3.删除索引:delete请求

delete 索引库名

二、映射配置

1.创建映射关系

  1. PUT /索引库名/_mapping/类型名称
  2. {
  3. "properties": {
  4. "字段名": {
  5. "type": "类型",
  6. "index": true
  7. "store": true
  8. "analyzer": "分词器"
  9. }
  10. }
  11. }

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

实例

  1. /* 1.先创建索引 */
  2. put czxy
  3. /* 2.创建映射关系 */
  4. put czxy/_mapping/book
  5. {
  6. "properties": {
  7. "title": {
  8. "type": "text",
  9. "analyzer": "ik_max_word"
  10. },
  11. "images": {
  12. "type": "keyword",
  13. "index": "false"
  14. },
  15. "price": {
  16. "type": "float"
  17. }
  18. }
  19. }

2.查看映射关系

GET /索引库名/_mapping

3.字段属性详解

(1)type

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

(2)index

index影响字段的索引情况。

  1. true:字段会被索引,则可以用来进行搜索。默认值就是true
  2. false:字段不会被索引,不能用来搜索

index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。

但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。

(3)store

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

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

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

三、数据操作

1.添加数据

语法:没有id

POST _index/_type/

{

  "属性": "值",

  ....

}

实例

  1. POST czxy/book/
  2. {
  3. "title": "标题",
  4. "price": 1234
  5. }

2.添加或更新数据

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

PUT _index/_type/_id

{

  "属性": "值",

  ....

}

实例

  1. PUT czxy/book/b001
  2. {
  3.   "title": "标题123",
  4.   "price": 1234
  5. }

3.删除数据

语法:DELETE _index/_type/_id

实例:DELETE czxy/book/b001

四、查询操作

1.简单查询

指定id查询:GET czxy/book/b001

指定id查询,检索指定内容:GET czxy/book/b001?_source=title,price

2.高级查询

(1)准备数据

  1. PUT czxy2
  2. PUT czxy2/_mapping/user
  3. {
  4. "properties": {
  5. "username": {
  6. "type": "text",
  7. "analyzer": "ik_max_word"
  8. },
  9. "city": {
  10. "type": "keyword"
  11. },
  12. "age": {
  13. "type": "float"
  14. }
  15. }
  16. }
  17. PUT czxy2/user/u001
  18. {
  19. "username": "张三",
  20. "city": "山西",
  21. "age": 18
  22. }
  23. PUT czxy2/user/u002
  24. {
  25. "username": "张四",
  26. "city": "山东",
  27. "age": 20
  28. }
  29. PUT czxy2/user/u003
  30. {
  31. "username": "张三三",
  32. "city": "山东",
  33. "age": 22
  34. }

(2)查询所有(match_all:检索所有的数据)

  1. GET _search
  2. {
  3. "query": {
  4. "match_all": {}
  5. }
  6. }

(3)查询指定索引的所有

  1. GET czxy2/_search
  2. {
  3. "query": {
  4. "match_all": {}
  5. }
  6. }

(4)查询部分结果

  1. GET czxy2/_search
  2. {
  3. "query": {
  4. "match_all": {}
  5. },
  6. "_source": ["username","city"]
  7. }

(5)条件查询:匹配查询

  1. GET czxy2/_search
  2. {
  3. "query": {
  4. "match": {
  5. "username": "张三"
  6. }
  7. }
  8. }

(6)条件查询:复合查询(多条件查询)

1.bool:多条件拼接

2.must:必须

3.must_not:不含

4.should:可有可无

  1. GET czxy2/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "city": "山东"
  9. }
  10. }
  11. ],
  12. "must_not": [
  13. {
  14. "match": {
  15. "age": 22
  16. }
  17. }
  18. ]
  19. }
  20. }
  21. }

(7)should并集查询

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

  1. GET czxy2/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "should": [
  6. {
  7. "match": {
  8. "city": "山东"
  9. }
  10. },
  11. {
  12. "match": {
  13. "city": "山西"
  14. }
  15. }
  16. ]
  17. }
  18. }
  19. }

(8)精确匹配

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

  1. GET czxy2/_search
  2. {
  3. "query": {
  4. "term": {
  5. "age": 22
  6. }
  7. }
  8. }

(9)范围查询

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

  1. GET czxy2/_search
  2. {
  3. "query": {
  4. "range": {
  5. "age": {
  6. "gte": 19,
  7. "lte": 21
  8. }
  9. }
  10. }
  11. }

(10)排序

  1. GET czxy2/_search
  2. {
  3. "query": {
  4. "match_all": {}
  5. },
  6. "sort": [
  7. {
  8. "age": {
  9. "order": "desc"
  10. }
  11. }
  12. ]
  13. }

(11)分页查询

from 设置索引号,从0开始

size 设置每页个数

  1. GET czxy2/_search
  2. {
  3. "query": {
  4. "match_all": {}
  5. },
  6. "from": 0,
  7. "size": 1
  8. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号