ElasticSearch索引可以直接添加数据,但是默认情况下会将所有非数字的字段都做完文本(text)处理,如果要根据字段类型进行特别定制的话,需要用到ElasticSearch的mapping功能去设置字段类型。
ElasticSearch索引可以设置分词词库,如果没有设置的话,就会使用默认的词库进行匹配。默认的词库对中文支持不是很好,它会把汉字拆分成一个一个的单独的字去匹配。如果要设置自己的分词词库就要用到ElasticSearch的setting功能。
ElasticSearch索引建立之后字段就不能增减了,要想修改只有新建一个新的索引一个方法,但是这会影响服务的正常使用,为了解决这个问题可以通过alias去快速地给新索引建立一个别名,因为建立别名的速度很快可以最大限度地规避服务中断的可能。
ElasticSearch索引的数据的存储规则是平均写入到每一个分片里面,这样做的好处是如果一个分片出现故障不会导致索引数据完全丢失的严重事故。但是有些时候我们希望一类数据存储到一个分片里面,这样可以提高检索速度。这个时候就可以提高routing功能来强制数据存储到同一个分片上面。
yum install epel-release -y
yum install nodejs -y
yum install npm -y
npm install elasticdump
npm install -g n
sudo n v10
ln -s `pwd`/node_modules/elasticdump/bin/elasticdump /usr/bin/elasticdump
elasticdump --input=http://elasticsearch:9200/test --output=./test.json --type=mapping
#导入test索引mapping
elasticdump --input=./test.json --output=http://elasticsearch:9200/test --type=mapping
#导出所有索引mapping (1)
elasticdump --input=http://elasticsearch:9200/ --output=./all_mapping.json --all=true --type=mapping
#导入所有索引mapping (2)
elasticdump --input=./all_mapping.json --output=http://elasticsearch:9200/ --all=true --type=mapping
elasticdump --input=http://elasticsearch:9200/test --output=./test.json --type=data
#导入数据
elasticdump --input=./test.json --output=http://elasticsearch:9200/test --type=data
#导出所有数据 (1)
elasticdump --input=http://elasticsearch:9200/ --output=./all_data.json --all=true --type=data
#导入所有数据 (2)
elasticdump --input=./all_data.json --output=http://elasticsearch:9200/ --all=true --type=data
导入mapping和setting只能在创建索引的时候设置,语法如下:
PUT /rds
{
"settings": {
"number_of_shards": 6,
"number_of_replicas": 0
},
"mappings": {
"rds": {
"properties": {
"rdsId": {
"type": "long"
},
"rdsTitle": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
}
}
}
}
}
导入别名直接网根目录的别名里面导入即可,自己拼接JSON数据。
POST /aliases
{
"actions": [
{
"add": {
"index": "rds",
"alias": "rds_1"
}
}
]
}
导入数据就是一行数据头信息,一行数据源信息。
{“_index”: “rds”, “_type”: “rds”, “_routing”: 77}
{“rdsId”: “10277”, “rdsTitle”: “ElasticSearch引擎”}
使用_mapping参数获得索引的mapping信息。
‘http://elasticsearch:9200/rds/_mapping?pretty=true’
使用_setting参数获得索引的setting信息,红圈内容是系统自动生成的需要去掉。
curl ‘http://elasticsearch:9200/rds/_settings?pretty=true’
使用_alias参数获得索引的别名信息。
curl ‘http://elasticsearch:9200/rds/_alias?pretty=true’
每个索引都有可能设置routing信息,导出的时候除了_id和_source之外,还需要带上_routing(如果有的话)。