索引操作
三、索引操作
索引就相当于关系型数据库的database。
1 新建索引
直接向ES服务器发出 PUT 请求,新建索引:
PUT foo
{
"settings": {
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
}
}
上面代码创建一个名为foo
的索引。其中,参数number_of_shards
表示分片个数,默认是5个分片,创建后不可修改,number_of_replicas
是每个分片创建几个副本,默认是1个副本,可以后续修改。
收到如下响应说明创建成功:
2 查询索引
#查询foo索引的配置信息
GET foo/_settings
#获取所有索引的配置信息
GET _all/_settings
#或者
GET _settings
#获取foo和abc索引的配置信息
GET foo,abc/_settings
3 更新索引
#修改foo索引的副本数量为2
PUT foo/_settings
{
"number_of_replicas": 2
}
如果出现cluster_block_exception
错误,这是由于ES新节点的数据目录data存储空间不足,导致从master主节点接收同步数据的时候失败,此时ES集群为了保护数据,会自动把索引分片index置为只读read-only。解决方法:磁盘扩容,或者放开索引只读设置
PUT _all/_settings
{
"index": {
"blocks": {
"read_only_allow_delete": false
}
}
}
4 删除索引
#删除foo索引
DELETE foo
四、映射与文档操作
索引创建之后,等于有了关系型数据库中的database。Type相当于关系型数据库的表, 在5.x及以前创建的索引可以有多个Type, 在Elasticsearch 6.x以后创建一个索引只有一个Type,但是仍然兼容以前版本。7.x之后取消了索引type类型的设置,不允许指定类型,默认为_doc,并且不兼容旧版本多个Type。但字段仍然是有的,我们需要设置字段的约束信息,叫做字段映射(mapping)。
1 数据类型
string类型:text,keyword
数字类型:long,integer,short,byte,double,float
日期类型:date
布尔类型:boolean
binary类型:binary
复杂类型:object(实体,对象),nested(列表)
geo类型:geo-point,geo-shape(地理位置)
专业类型:ip,competion(搜索建议)
2 映射参数
属性 | 描述 | 适合类型 |
---|---|---|
store | 值为yes表示存储,no表示不存储,默认为no | all |
index | yes表示分析,no表示不分析,默认为true | text |
null_value | 如果字段为空,可以设置一个默认值,比如"NA"(传过来为空,不能搜索,na可以搜索) | all |
analyzer | 可以设置索引和搜索时用的分析器,默认使用的是standard分析器,还可以使用whitespace,simple。都是英文分析器 | all |
include_in_all | 默认es为每个文档定义一个特殊域_all,它的作用是让每个字段都被搜索到,如果想让某个字段不被搜索到,可以设置为false | all |
format | 时间格式字符串模式 | date |
3 创建映射
PUT books
{
"mappings": {
"properties":{
"title":{
"type":"text",
"analyzer": "ik_max_word"
},
"price":{
"type":"integer"
},
"address":{
"type":"keyword"
},
"company":{
"properties":{
"name":{"type":"text"},
"company_addr":{"type":"text"},
"employee_count":{"type":"integer"}
}
},
"publish_date":{"type":"date","format":"yyy-MM-dd"}
}
}
}
我们处理中文一般会选择ik分词器ik_max_word
。
本文来自博客园,作者:yyyz,转载请注明原文链接:https://www.cnblogs.com/yyyzyyyz/p/15699338.html