本周开始做搜索功能优化,这边的搜索功能主要用的是ES。代码写好提测给测试同学的时候,测试同学说搜不出东西,我排查了下,是ES的索引的mapping同线上不一致,线上的mapping增加了三个分词插件,分别是ik,NGram,pinyin,搜索的时候对这些插件扩展字段进行的搜索。

现在就是要把测试环境的索引mapping修改成同线上一致的,我采用的是下面的方案:

  1. 新建一个原索引(index)的备份索引(index_bak),这个备份索引采用线上一致的settings和mappings,可以直接将线上的settings和mappings复制到json文件里。

    curl -XPUT 'http://127.0.0.1:9200/index_bak' -d '@create_index_bak.json'
  1. 将数据从原索引reindex到备份索引。

    curl -XPOST 'http://127.0.0.1:9200/_reindex' -d'
     {
       "source": {
         "index": "index"
       },
       "dest": {
         "index": "index_bak"
       }
     }
     '   
  2. 删除原索引

    curl -XDELETE 'http://127.0.0.1:9200/index'
  3. 同新建备份索引一样,重新新建一个索引,同原来的索引同名

    curl -XPUT 'http://127.0.0.1:9200/index' -d '@create_index_bak.json'
  4. 将数据从备份索引reindex到新建的索引

    curl -XPOST 'http://127.0.0.1:9200/_reindex' -d'
     {
       "source": {
         "index": "index_bak"
       },
       "dest": {
         "index": "index"
       }
     }
     '   
  5. 删除备份索引

    curl -XDELETE 'http://127.0.0.1:9200/index_bak'

标签: es, elasticsearch

添加新评论