索引
创建索引
创建索引的时候可以通过修改number_of_shards和number_of_replicas参数的数量来修改分片和副本的数量。
在默认的情况下分片的数量是5个,副本的数量是1个。
例如,创建三个主分片,两个副本分片的索引。
请求:PUT http://127.0.0.1:9200/secisland/参数:
后面可以通过update-index-settings API完成对副本数量的修改。例如
请求:PUT http://127.0.0.1:9200/secisland/_settings/参数:
这样就把副本的数量改成1个副本。
对于任何Elasticsearch文档而言,一个文档会包括一个或者多个字段,任何字段都要有自己的数据类型,例如string、integer、date等。Elasticsearch中是通过映射来进行字段和数据类型对应的。在默认的情况下Elasticsearch会自动识别字段的数据类型。同时Elasticsearch提供了mappings参数可以显式地进行映射。
注意:ES版本为
7.2.0
,不再支持创建指定类型,索引的默认类型为_doc,
创建索引的映射时,不需要指定类型即可
例如:
去除指定类型之后就可以了
删除索引
请求:DELETE http://127.0.0.1:9200/secisland/
上面的示例删除了名为secisland的索引。删除索引需要指定索引名称,别名或者通配符。删除索引可以使用逗号分隔符,或者使用_all或*号删除全部索引。
注意: _all或*删除全部索引时要谨慎操作。为了防止误删除,可以设置elasticsearch.yml属性action.destructive_requires_name为true,禁止使用通配符或_all删除索引,必须使用名称或别名才能删除该索引。
获取索引
获取索引接口允许从一个或多个索引中获取信息。
请求:GET http://127.0.0.1:9200/secisland/
通过这个请求会把系统中的信息都显示出来,包括默认的一些配置
{
"secisland": {
"aliases": {},
"mappings": {
"properties": {
"detail": {
"type": "text"
},
"id": {
"type": "integer"
},
"name": {
"type": "keyword"
},
"price": {
"type": "double"
}
}
},
"settings": {
"index": {
"creation_date": "1606810679684",
"number_of_shards": "1",
"number_of_replicas": "1",
"uuid": "gaxgmh2VQiCPoqniy00A2Q",
"version": {
"created": "7070199"
},
"provided_name": "secisland"
}
}
}
}
打开/关闭索引
打开/关闭索引接口允许关闭一个打开的索引或者打开一个已经关闭的索引。关闭的索引只能显示索引元数据信息,不能够进行读写操作。打开/关闭索引的方式是/{索引名}/_close或者/{索引名}/_open,完整示例如下。
请求:POST 127.0.0.1:9200/secisland/_close
可以同时打开或关闭多个索引。如果指向不存在的索引会抛出错误。可以使用配置ignore_unavailable=true,不显示异常。
全部索引可以使用_all打开或关闭,或者使用通配符表示全部(比如*)
设置config/elasticsearch.yml属性action.destructive_requires_name为true,禁止使用通配符或者_all标识索引。因为关闭的索引会继续占用磁盘空间而不能使用,所以关闭索引接口可能造成磁盘空间的浪费。
禁止使用关闭索引功能,可以设置settingscluster.indices.close.enable为false,默认是true。
索引映射管理
增加映射
API允许你向索引(index)添加文档类型(type),或者向文档类型(type)中添加字段(field)。
请求:PUT http://127.0.0.1:9200/secisland
参数:添加索引名为secisland,包含字段id,name,price,detail
请求:PUT http://127.0.0.1:9200/secisland/_mapping
参数:向已经存在的索引secisland添加字段count,字段类型是int
更新字段映射:
请求:PUT http://127.0.0.1:9200/secisland/_mapping
参数:修改映射,对属性count 修改index参数为true,允许使用分析器
注意:Elasticsearch从
5.X
就引入了text
和keyword
,其中keyword
适用于不分词字段,搜索时只能完全匹配,这时string
还保留着。
到了6.X
就彻底移除string
了。另外,"index"
的值只能是boolean变量了。
获取映射
获取文档映射接口允许通过索引或者索引和类型来搜索:
请求:GET http://127.0.0.1:9200/secisland/_mapping
系统同时支持获取多个索引和类型的语法。获取文档映射接口一次可以获取多个索引或文档映射类型。该接口通常是如下格式:host:port/{index}/_mapping,{index}可以接受逗号(,)分隔符,也可以使用_all来表示全部索引。如下所示:
请求:GET http://127.0.0.1:9200/_all/_mapping
索引配置
更新索引配置
在REST风格的URL设置中设置/_settings(所有索引)或者{index}/_settings,可以设置一个或者多个索引,例如:
请求:PUT http://127.0.0.1:9200/secisland/_settings
参数:
更新分词器。创建索引后可以添加新的分析器。添加分析器之前必须先关闭索引,添加之后再打开索引。
请求:POST http://127.0.0.1:9200/secisland/_close
请求:PUT http://127.0.0.1:9200/secisland/_settings
参数:
请求:POST http://127.0.0.1:9200/secisland/_open
如上示例,先关闭secisland索引,然后添加自定义分析器,分析器策略是空格分析器(whitespace),就是按照空格进行分词。
获取配置
索引中包含很多配置参数,可以通过下面命令获取索引的参数配置:
GET http://127.0.0.1:9200/secisland/_settings
获取索引配置参数的请求格式如下:
GET http://host:port/{index}/_settings
{index}为索引名称,可以接收多种参数格式,*|_all|name1,name2,…
索引分析
索引分析(analysis)是这样一个过程:首先,把一个文本块分析成一个个单独的词(term),为了后面的倒排索引做准备。然后标准化这些词为标准形式,提高它们的“可搜索性”。这些工作是分析器(analyzers)完成的。一个分析器(analyzers)是一个组合,用于将三个功能放到一起:
□字符过滤器:字符串经过字符过滤器(character filter)处理,它们的工作是在标记化之前处理字符串。字符过滤器能够去除HTML标记,或者转换“&”为“and”。
□分词器:分词器(tokenizer)被标记化成独立的词。一个简单的分词器(tokenizer)可以根据空格或逗号将单词分开。
□标记过滤器:每个词都通过所有标记过滤(token filters)处理,它可以修改词(例如将"Quick"转为小写),去掉词(例如连接词像“a”、“and”、“the”等),或者增加词(例如同义词像“jump”和“leap”)。
Elasticsearch提供很多内置的字符过滤器,分词器和标记过滤器。这些可以组合起来创建自定义的分析器以应对不同的需求。
测试分析器:
请求:POST 127.0.0.1:9200/_analyze
该结果将返回“this is a test”使用standard分析器后词的解析情况。在该分析器下,将会分析成this,is,a,test四个词。这里不细说,只是简单了解。