1,查询index
查询index的settings :分片,分词器
GET /{index}/_settings
查询index 字段定义
GET /{index}/_mapping
查询settings和mapping
GET /{index}
查询index信息,列如状态,数据大小,条数
GET /_cat/indices?v&index={index}
查询索引字段分词结果
GET /{index}/{type}/{id}/_termvectors?fields={field}
自定义查询
GET /{index}/_search
{
bool查询条件
}
通过id查询
GET /{index}/{type}/{id}
2,修改
修改单个字段
POST /{index}/{type}/{id}/_update
{
"doc":{
"fiedName":"fiedvalue"
}
}
创建索引
PUT /{index}
{
setting和mapping
}
3,数据迁移
方式一,reindex,需要添加白名单
reindex.remote.whitelist: ["es-cn-09k1rgid9000g****.elasticsearch.aliyuncs.com:9200"]
POST _reindex?refresh&wait_for_completion=false
{
"conflicts": "proceed",
"source": {
"remote": {
"host": "http://ip:9200"
},
"index": "oldindex",
"type": "type",
"size": 10000
},
"dest": {
"index": "newindex",
"op_type": "index"
}
}
查询迁移进度
GET /_tasks/{taskId}
PUT /my_index_v1/_alias/my_index //给索引添加别名
DElETE /my_index_v1/_alias/my_index //删除别名
方式二, elasticsearch-dump,不需要添加白名单,但是需要安装elasticsearch-dump,此处用docker
docker run --rm -ti elasticdump/elasticsearch-dump --input=http://ip1:9200/index1 --output=http://ip2:9200/index2 --type=settings
docker run --rm -ti elasticdump/elasticsearch-dump --input=http://ip1:9200/index1 --output=http://ip2:9200/index2 --type=mapping
docker run --rm -ti elasticdump/elasticsearch-dump --input=http://ip1:9200/index1 --output=http://ip2:9200/index2 --type=data
前两条导settings和mapping过去,第三条导数据过去,只要是安装了docker的机器并且有镜像的就可以跑,不用在elasticsearch本地跑
4,问题
es存储的字符串类型为默认的text和keyword类型
{
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
es默认分次器StandardAnalyzer,按符号,连接符,单词进行分词存储
列如:abc-d-1234 会被分词成 abc,d,1234三个词存储;而没有连接符的不会被分词,列如:abcd1234 则不分词
导致的结果是:
普通term和terms查询: abc-d-1234匹配不到abc-d-1234 ,而abc,d,1234都能匹配到abc-d-1234,
abcd1234能匹配到abcd1234,这也是很多场景原来没有出现问题的原因,后来有问题了,因为原来没有带”-“的数据
默认的text和keyword类型精确匹配,应在字段后加.keyword进行精确匹配