本次使用版本:6.6.2,操作均在kibana
如下创建一个索引名称为ftyj_test,有2个分片,每个分片有2个备份,并静态指定这个索引中的type为blog,以及blog中每篇文章的字段类型,其中type为text的字段参与分词,type为keyword的字段不参与分词,完整检索,如文章作者
分析器隶属于索引,在该索引中创建了自定义分析器两个,一个是粗粒度分词(coarse-grain),采用的是ik分词器中的ik_smart分词策略,意思是少分词,另一个是细粒度分词(fine-grain),采用的是ik分词器中的ik_max_word分词策略,将会最大程度的分出最多的词
PUT ftyj_test
{
"settings":{
"number_of_shards": "2",
"number_of_replicas": "2",
"analysis": {
"analyzer":{
"coarse-grain":{
"tokenizer":"ik_smart"
},
"fine-grain":{
"tokenizer":"ik_max_word"
}
}
}
},
"mappings": {
"blog": {
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "text"
},
"publishTime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"author": {
"type": "keyword"
},
"summary": {
"type": "text"
}
}
}
}
}
POST ftyj_test/blog/1
{
"id":1,
"title":"GitHub 告急!黑客威胁程序员不交钱就删库!",
"publishTime":"2019-05-05 17:02:01",
"author":"CSDN资讯",
"summary":"5月3日,当中国程序员正愉快地过五一节时,国外程序员突然发现自己GitHub上的代码不翼而飞!自己的GitHub一秒变成悬疑片现场,不仅被黑客攻击删代码了,嚣张的黑客还留下一封勒索信:"
}
POST ftyj_test/blog/2
{
"id":2,
"title":"华为员工年薪 200 万!真相让人心酸!",
"publishTime":"2019-05-04 20:27:01",
"author":"CSDN资讯",
"summary":"最近,有华为员工在匿名社交网站上,曝光自己税前年收入91万,再加上股票TUP(Time Unit Plan,直译为“时间单位计划”,即奖励期权计划)和工资,年收入突破200万!"
}
GET ftyj_test/blog/1
GETftyj_test/blog/_search
POST ftyj_test/blog/2/_update
{
"doc": {
"title":"华为员工年薪 200 万!这么多吗?"
}
}
结果:
同时文档的version将会+1,这个在后面的重建文档(reindex)中将会使用
查看索引的mapping
GET ftyj_test/_mapping
当要备份源头索引(ftyj_test)到目标索引(ftyj)上,旧索引上三条记录以及id,title,更新版本
源头索引ftyj_test(source)
文档id | title | _version |
---|---|---|
1 | GitHub 告急!黑客威胁程序员不交钱就删库! | 2 |
2 | 华为员工年薪 200 万! | 6 |
H4HqkGoBWF2bAxMKGO0E | 区块链技术可能为业界带来的改变 | 1 |
目标索引ftyj(dest)
文档id | title | _version |
---|---|---|
1 | 只需 20 行代码,就能读懂复仇者联盟的人物关系 | 5 |
2 | 2019首届武汉市网络安全技能大赛筹备会顺利召开 | 4 |
如果把源头文档reindex到dest,文档1和2会产生冲突
我们使用version type=external来重建索引,执行如下命令
POST _reindex
{
"conflicts": "proceed",
"source": {
"index":"ftyj_test"
},
"dest": {
"index": "ftyj",
"version_type": "external"
}
}
执行结果:
目标索引ftyj(dest)
文档id | title | _version |
---|---|---|
1 | 只需 20 行代码,就能读懂复仇者联盟的人物关系 | 5 |
2 | 华为员工年薪 200 万! | 6 |
3 | H4HqkGoBWF2bAxMKGO0E | 1 |
可以发现:
1 # 外部版本号小于内部,版本冲突,保留文档和内部版本号5
2 # 外部版本号> 内部,因此覆盖文档 & 保留外部版本号6
H4HqkGoBWF2bAxMKGO0E # 新文档,创建,并保留外部版本号1
尝试字段op_type:
POST _reindex
{
"conflicts": "proceed",
"source": {
"index":"ftyj_test"
},
"dest": {
"index": "ftyj_optype"
"op_type": "create"
}
}
结果:
dest新索引ftyj_optype没有的文档全部从源头索引ftyj_test创建,且版本号均为1
尝试字段op_type和version type组合
源头表(ftyj):
文档id | title | _version |
---|---|---|
1 | 只需 20 行代码,就能读懂复仇者联盟的人物关系 | 5 |
2 | 华为员工年薪 200 万! | 6 |
H4HqkGoBWF2bAxMKGO0E | 区块链技术可能为业界带来的改变 | 2 |
目标表(ftyj_optype2):
文档id | title | _version |
---|---|---|
1 | GitHub 告急!黑客威胁程序员不交钱就删库! | 2 |
2 | 华为员工年薪 200 万! | 6 |
执行命令:
POST _reindex
{
"conflicts": "proceed",
"source": {
"index":"ftyj_test"
},
"dest": {
"index": "ftyj_optype2",
"version_type": "external",
"op_type": "create"
}
}
执行结果:
目标索引
目标表(ftyj_optype2):
文档id | title | _version |
---|---|---|
1 | 只需 20 行代码,就能读懂复仇者联盟的人物关系 | 5 |
2 | 华为员工年薪 200 万! | 6 |
H4HqkGoBWF2bAxMKGO0E | 区块链技术可能为业界带来的改变 | 2 |
结论:只有版本versiontpe起了作用,目标索引没有的第三条数据的版本号并没有因为添加了op_type就变成了1,还是继承了源头表的版本,因此op_type和version_type组合并没有起到作用