Elasticsearch教程---Elasticsearch索引的创建(四)

第六章 索引的创建

6.1 语法

Elasticsearch采用Rest风格API,因此其API就是一次http请求,你可以用任何工具发起http请求

创建索引的请求格式:

  • 请求方式:PUT

  • 请求路径:/索引库名

  • 请求参数:json格式:

    {
        "settings": {
            "number_of_shards": 3,
            "number_of_replicas": 2
          }
    }
    
    • settings:索引库的设置
      • number_of_shards:分片数量
      • number_of_replicas:副本数量

    FAQ 分片的大小和数量怎么设定?

    提示1:避免有非常大的分片,因为大的分片可能会对集群从故障中恢复的能力产生负面影响。 对于多大的分片没有固定的限制,但是分片大小为50GB通常被界定为适用于各种用例的限制

    提示2:可以在集群节点上保存的分片数量与可用的堆内存大小成正比,但这在Elasticsearch中没有的固定限制。 一个很好的经验法则是:确保每个节点的分片数量保持在低于每1GB堆内存对应集群的分片在20-25之间。 因此,具有30GB堆内存的节点最多可以有600-750个分片,但是进一步低于此限制,您可以保持更好。 这通常会帮助群体保持处于健康状态。

6.2 测试

http://192.168.82.188:9200/qf

我们先用postman测试来试试
在这里插入图片描述

可以看到索引创建成功了。

6.3 使用kibana创建

kibana的控制台,可以对http请求进行简化,示例:
在这里插入图片描述

相当于是省去了elasticsearch的服务器地址

而且还有语法提示,非常舒服。

6.4 查看索引设置

语法

Get请求可以帮我们查看索引信息,格式:

GET /索引库名

在这里插入图片描述

或者,我们可以使用*来查询所有索引库配置:

6.5 删除索引

删除索引使用DELETE请求

语法

DELETE /索引库名

当然,我们也可以用HEAD请求,查看索引是否存在:

HEAD qianfeng

6.6 映射配置

索引有了,接下来肯定是添加数据。但是,在添加数据之前必须定义映射。

什么是映射?

映射是定义文档的过程,文档包含哪些字段,这些字段是否保存,是否索引,是否分词等

只有配置清楚,Elasticsearch才会帮我们进行索引库的创建(不一定)

6.7 创建映射字段

语法

请求方式依然是PUT

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

put  /qf/_mapping/tb_item{
	 "properties":{
	 		"type":
	 		"index""store":
	 }
}
  • 类型名称:就是前面讲的type的概念,类似于数据库中的不同表
    字段名:任意填写 ,可以指定许多属性,例如:
  • type:类型,可以是text、long、short、date、integer、object等
  • index:是否索引,默认为true
  • store:是否存储,默认为false
  • analyzer:分词器,这里的ik_max_word即使用ik分词器

示例

发起请求:

POST  qf/_mapping/items
{
  "properties":
  {
    "title":{
    "type":"text",
    "analyzer":"ik_max_word"
  },
  "sellpoint":{
    "type": "text",
    "index":true,
    "store": true
  }
  ,
  "images":{
     "type":"keyword",
     "index":false
  },
  "price":{
    "type":"float" 
  }
  }
}

响应结果:

{
  "acknowledged": true
}

6.8 查看映射关系

语法:

GET /索引库名/_mapping

示例:

GET /qf/_mapping

响应:

{
  "qf": {
    "mappings": {
      "items": {
        "properties": {
          "images": {
            "type": "keyword",
            "index": false
          },
          "price": {
            "type": "float"
          },
          "sellpoint": {
            "type": "text",
            "store": true
          },
          "title": {
            "type": "text",
            "analyzer": "ik_max_word"
          }
        }
      }
    }
  }
}

6.9 字段属性详解

6.9.1 type

Elasticsearch中支持的数据类型非常丰富:
在这里插入图片描述

我们说几个关键的:

  • String类型,又分两种:

    • text:可分词,不可参与聚合
    • keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
  • Numerical:数值类型,分两类

    • 基本数据类型:long、interger、short、byte、double、float、half_float
    • 浮点数的高精度类型:scaled_float
      • 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
  • Date:日期类型

    elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

  • boolean

​ 设置字段类型为boolean后,可以填入的值为:true、false、“true”、“false”。

  • binary

​ binary类型接受base64编码的字符串。

  • geo point

    地理点类型用于存储地理位置的经纬度对

其它的不再一一讲解,用的不多,大家参考官方文档:

https://www.elastic.co/guide/en/elasticsearch/reference/6.5/mapping-types.html

6.9.2 index

index影响字段的索引情况。

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

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

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

6.9.3 store

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

在学习lucene和solr时,我们知道如果一个字段的store设置为false,那么在文档列表中就不会有这个字段的值,用户的搜索结果中不会显示出来。

但是在Elasticsearch中,即便store设置为false,也可以搜索到结果。

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

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

6.9.4 boost

激励因子,这个与lucene中一样,我们可以通过指定一个boost值来控制每个查询子句的相对权重,该值默认为1。一个大于1的boost会增加该查询子句的相对权重,如下所示:

GET/_search{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "content": {
                        "query": "full text search",
                        "operator": "and"
                    }
                }
            },
            "should": [{
                "match": {
                    "content": {
                        "query": "Elasticsearch",
                        "boost": 3
                    }
                }
            },
            {
                "match": {
                    "content": {
                        "query": "Lucene",
                        "boost": 2
                    }
                }
            }]
        }
    }
}

6.9.5 analyzer

定义的是该字段的分析器,默认的分析器是 standard 标准分析器,这个地方可定义为自定义的分析器。比如IK分词器为:ik_max_word

6.10 学生实习题

某短信平台发送短信的下发表字段如下所示:

字段名称备注
createDate创建时间
sendDate发送时间
longCode发送的长号码,如“1069886622”
mobile如:13800000000
corpName发送公司名称,需要分词检索
smsContent下发短信内容,需要分词检索
state短信下发状态 0 成功 1 失败
operatorId运营商编号 1 移动 2 联通 3 电信
province省份
ipAddr下发服务器IP地址
replyTotal短信状态报告返回时长(秒)
fee扣费(分)

请根据上面的表设计出索引结构。

完整代码:https://github.com/chutianmen/elasticsearch-examples

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值