用mongo-connector同步生成的EelasticSearch索引如何添加中文分词ik

当搜索引擎ES中的索引建好之后,是不能对其中的已有字段的属性作更改的,要更改,除非删除索引,重新建立。网上也有说用重索引的方法改索引别名,感觉好麻烦没试,有兴趣的朋友可参考( http://blog.csdn.net/dm_vincent/article/details/41643793)。
       我的索引是从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进行同步即可
各步相关代码:

1. sudo
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/
上述第2步的目的是: 原有dzplib中的数据结构,里面没有加中文分词,同步过去也不会有,删除之后,重新插入一条数据(只有一个字段,可以为第6步的数据更新作准备,因为只有一个字段的dzplib,同步过去之后,还是只有一个字段,可以更新时,对新字段添加ik分词),更新索引的代码如下:

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=-m localhost:27017 -t localhost:9200 -d elastic2_doc_manager(今天),基本上就这样了。由于是初学,经验不足,请谅,欢迎交流。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值