Elasticsearch搜索服务学习之九——索引管理

高新技术,ElasticSearch

2017-07-08

240

0

目录


在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。(摘录自百度百科)
 
在elasticsearch中,索引有多层涵义:
  • 作为动词,意为创建索引,简单理解就是对数据建立索引结构以加速搜索;
  • 作为名词,与关系数据库的索引概念类似,同时还具有另一层含义,就是相当于关系数据库的库。索引是具有类似特征的文档集合。例如,您可以创建客户数据索引、产品目录i索引,以及订单数据索引。索引是由名称(必须是所有小写)标识的,这个名称用于在执行索引、搜索、更新和删除操作时引用索引。

创建索引:

创建索引的时候可以通过修改 number_of_shardsnumber_of_replicas参数的数量来修改分片和副本的数量。
在默认的情况下分片的数量是5个,副本的数量是1个。
 
例如,创建三个主分片,两个副本分片的索引。
curl -XPUT 'localhost:9200/test?pretty' -H 'Content-Type:application/json' -d '{"settings":{"index":{"number_of_shards":3, "number_of_replicas":2}}}'
 
返回:
{
"acknowledged" : true,
"shards_acknowledged" : true
}
 
查看索引情况:
curl -XGET 'localhost:9200/_cat/indices?pretty'
返回:
yellow open test HH5YWx4QQiid4-c_u9Cw4g 3 2 0 0 390b 390b
可以通过update-index-settings API完成对副本数量的修改。例如
请求:
curl -XPUT 'localhost:9200/test/_settings?pretty' -H 'Content-Type:application/json' -d '{"index":{"number_of_replicas":1}}'
或者直接省略index:
curl -XPUT 'localhost:9200/test/_settings?pretty' -H 'Content-Type:application/json' -d '{"number_of_replicas":4}'
对于任何Elasticsearch文档而言,一个文档会包括一个或者多个字段,任何字段都要有自己的数据类型,例如string、integer、date等。Elasticsearch中是通过映射来进行字段和数据类型对应的。在默认的情况下Elasticsearch会自动识别字段的数据类型。同时Elasticsearch提供了mappings参数可以显式地进行映射。
修改上边的索引,关联mapping:
$ curl -XPUT 'localhost:9200/test/_mappings/logdata?pretty' -H 'Content-Type:application/json' -d '{"properties":{"logtype":{"type":"string", "index":"not_analyzed"}}}'

删除索引

DELETE http://127.0.0.1:9200/test/
上面的示例删除了名为tets的索引。删除索引需要指定索引名称,别名或者通配符。
删除索引可以使用逗号分隔符,或者使用_all或*号删除全部索引。
注意
_all或*删除全部索引时要谨慎操作。
为了防止误删除,可以设置 elasticsearch.yml属性 action.destructive_requires_name为true,禁止使用通配符或_all删除索引,必须使用名称或别名才能删除该索引。
curl -XDELETE 'localhost:9200/_all/?pretty'
返回:
{
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "Wildcard expressions or all indices are not allowed"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "Wildcard expressions or all indices are not allowed"
    },
    "status": 400
}

获取索引

刚才的test索引被删除了,重新创建一个:
curl -XPUT 'localhost:9200/test/?pretty' -d '{"settings":{"number_of_shards":2, "number_of_replicas":1}, "mappings":{"logtype":{"properties":{"tags":{"type":"keyword", "index":"not_analyzed"}, "content":{"type":"text"}}}}}'
返回
{
"acknowledged" : true,
"shards_acknowledged" : true
}
然后获取索引:
GET GEThttp://127.0.0.1:9200/test/
通过这个请求会把系统中的信息都显示出来,包括默认的一些配置,例如上面的返回值为:
curl -XGET 'localhost:9200/test/?pretty'
返回
{
    "test": {
        "aliases": {},
        "mappings": {
            "logtype": {
                "properties": {
                    "content": {
                        "type": "text"
                    },
                    "tags": {
                        "type": "keyword"
                    }
                }
            }
        },
        "settings": {
            "index": {
                "creation_date": "1499399183285",
                "number_of_shards": "2",
                "number_of_replicas": "1",
                "uuid": "IM-6_ApKTcC8bVz_JrAnpQ",
                "version": {
                    "created": "5040099"
                },
                "provided_name": "test"
            }
        }
    }
}
获取索引需要指定索引名称,别名或者通配符。
获取索引可以使用通配符获取多个索引,或者使用 _all或*号获取全部索引。
返回结果过滤:可以自定义返回结果的属性。
请求:
GET http://127.0.0.1:9200/test/_settings,_mappings
上面示例只返回 test索引的 settingsmappings属性。可配置的属性包括 _settings、_mappings、_warmers_aliases
如果索引不存在,系统会返回一个错误内容.

打开/关闭索引

允许关闭一个打开的索引或者打开一个已经关闭的索引。 关闭的索引只能显示索引元数据信息,不能够进行读写操作
打开关闭索引:
POST /{索引名}/_close或者/{索引名}/_open
注意打开关闭索引时是发送POST请求(可以理解为对索引进行修改操作)
例如:
curl -XPOST 'localhost:9200/test/_close?pretty'
{
"acknowledged" : true
}
再次查询时:
curl -XGET 'localhost:9200/test/type/1?pretty'
 
返回
{
    "error": {
        "root_cause": [
            {
                "type": "index_closed_exception",
                "reason": "closed",
                "index_uuid": "a4iJc8FDSBulD3IVESXjCA",
                "index": "test"
            }
        ],
        "type": "index_closed_exception",
        "reason": "closed",
        "index_uuid": "a4iJc8FDSBulD3IVESXjCA",
        "index": "test"
    },
    "status": 403
}
可以看到返回索引被关闭异常。

同时打开或关闭多个索引

如果指向不存在的索引会抛出错误。可以使用配置 ignore_unavailable=true,不显示异常。
全部索引可以使用_all打开或关闭,或者使用通配符表示全部(比如*)。
设置config/elasticsearch.yml属性 action.destructive_requires_name为true,禁止使用通配符或者_all标识索引。
因为关闭的索引会继续占用磁盘空间而不能使用,所以关闭索引接口可能造成磁盘空间的浪费。
禁止使用关闭索引功能,可以设置 settingscluster.indices.close.enable为false,默认是true。
curl -XPOST 'localhost:9200/test/_close?pretty'
返回
{
    "error": {
        "root_cause": [
            {
                "type": "illegal_state_exception",
                "reason": "closing indices is disabled - set [cluster.indices.close.enable: true] to enable it. NOTE: closed indices still consume a significant amount of diskspace"
            }
        ],
        "type": "illegal_state_exception",
        "reason": "closing indices is disabled - set [cluster.indices.close.enable: true] to enable it. NOTE: closed indices still consume a significant amount of diskspace"
    },
    "status": 500
}

 


前一篇:Elasticsearch搜索服务学习之八——基本概念和术语
后一篇:Elasticsearch搜索服务学习之十——索引映射管理

belonk

轻轻地我走了,正如我轻轻地来,我挥一挥衣袖,不带走一片云彩