当搜索引擎ES中的索引建好之后,是不能对其中的已有字段的属性作更改的,要更改,除非删除索引,重新建立。网上也有说用重索引的方法改索引别名,感觉好麻烦没试,有兴趣的朋友可参考(
http://blog.csdn.net/dm_vincent/article/details/41643793)。
我的索引是从MongoDB上同步过来时, 自动生成的。昨天我要对一个字段更改属性,过程为:
我的索引是从MongoDB上同步过来时, 自动生成的。昨天我要对一个字段更改属性,过程为:
1.先对mongo数据库dzplib进行备份
--->2.删除dzplib
--->3.新建dzplib
--->4.插入一条数据(
db.Problem.insert({"comments":"test_qhz_0622"}))
--->
5. 同步到mongo-connector上
--->6.更新ES上的dzplib索引(加ik)
--->7.关闭mongo-connector---->8.通过备份恢复dzplib--->开启mongo-connector进行同步即可
各步相关代码:
curl -XPOSThttp://localhost:9200/dzplib /Problem/_mapping -d' {
因为这个dzplib中有两个type(Problem和Paper),分别用于按题搜索和按试卷搜索,都要用到中文分词(对应字段为:text及sys_topic),为了备用,我把其他可能的字段也加入了中文分词,比如:Subject等。
上述过程,我昨天从下午4点到晚上10点完成,持续6个小时,今天由于要把其他字段 也改成ik分词。我做了同样的操作,但只用了20分钟 ,做的惟一不同之处是,mongo-connector一直开启,这样,它就会自动更新索引,节省了大量时间。就是说整个过程,
mongo-connector一定要一直开启,它就能检测到mongoDB的任何变化。还有语句上的差别: sudo mongo-connector -m localhost:27017 -t localhost:9200 -d elastic2_doc_manager(昨天),sudo mongo-connector --auto-commit-interval=0 -m localhost:27017 -t localhost:9200 -d elastic2_doc_manager(今天),基本上就这样了。由于是初学,经验不足,请谅,欢迎交流。
各步相关代码:
1. sudo
2. db.dropDatabase()
上述第2步的目的是: 原有dzplib中的数据结构,里面没有加中文分词,同步过去也不会有,删除之后,重新插入一条数据(只有一个字段,可以为第6步的数据更新作准备,因为只有一个字段的dzplib,同步过去之后,还是只有一个字段,可以更新时,对新字段添加ik分词),更新索引的代码如下:
mongodump -h 127.0.0.1 -d dzplib -o
/opt/DataBase
2. db.dropDatabase()
8.sudo mongorestore -h 127.0.0.1 -d dzplib_dz /opt/DataBase/dzplib/
curl -XPOSThttp://localhost:9200/dzplib /Problem/_mapping -d' {
"Problem": {
"properties": {
"content": {
"properties": {
"elementContent": {
"type": "string",
"analyzer": "ik"
},
"elementName": {
"type": "string",
"analyzer": "ik"
}
}
},
"teachCascade": {
"type": "string",
"analyzer": "ik"
},
"grade": {
"type": "string",
"analyzer": "ik"
},
"subject": {
"type": "string",
"analyzer": "ik"
},
"quality": {
"type": "string",
"analyzer": "ik"
},
"type": {
"type": "string",
"analyzer": "ik"
},
"sourceType": {
"type": "string",
"analyzer": "ik"
},
"difficulty": {
"type": "string",
"analyzer": "ik"
},
"key": {
"type": "string",
"analyzer": "ik"
},
"teach": {
"type": "string",
"analyzer": "ik"
},
"text": {
"type": "string",
"analyzer": "ik"
}
}
}
}
'
curl -XPOST http://localhost:9200/dzplib
/Paper/_mapping -d'
{
"Paper": {
"properties": {
"paper_kind": {
"type": "string",
"analyzer": "ik"
},
"paper_area": {
"type": "string",
"analyzer": "ik"
},
"paperSubject": {
"type": "string",
"analyzer": "ik"
},
"paper_grade": {
"type": "string",
"analyzer": "ik"
},
"sys_topic": {
"type": "string",
"analyzer": "ik"
},
"content": {
"properties": {
"elementContent": {
"type": "string",
"analyzer": "ik"
},
"elementName": {
"type": "string",
"analyzer": "ik"
}
}
}
}
}
}
'
因为这个dzplib中有两个type(Problem和Paper),分别用于按题搜索和按试卷搜索,都要用到中文分词(对应字段为:text及sys_topic),为了备用,我把其他可能的字段也加入了中文分词,比如:Subject等。
上述过程,我昨天从下午4点到晚上10点完成,持续6个小时,今天由于要把其他字段 也改成ik分词。我做了同样的操作,但只用了20分钟 ,做的惟一不同之处是,mongo-connector一直开启,这样,它就会自动更新索引,节省了大量时间。就是说整个过程,
mongo-connector一定要一直开启,它就能检测到mongoDB的任何变化。还有语句上的差别: sudo mongo-connector -m localhost:27017 -t localhost:9200 -d elastic2_doc_manager(昨天),sudo mongo-connector --auto-commit-interval=0 -m localhost:27017 -t localhost:9200 -d elastic2_doc_manager(今天),基本上就这样了。由于是初学,经验不足,请谅,欢迎交流。