elasticsearch-reindex, 一个完整的特征 elasticsearch

分享于 

6分钟阅读

GitHub

  繁體 雙語
A full feature elasticsearch reindex tool
  • 源代码名称:elasticsearch-reindex
  • 源代码网址:http://www.github.com/garbin/elasticsearch-reindex
  • elasticsearch-reindex源代码文档
  • elasticsearch-reindex源代码下载
  • Git URL:
    git://www.github.com/garbin/elasticsearch-reindex.git
    Git Clone代码到本地:
    git clone http://www.github.com/garbin/elasticsearch-reindex
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/garbin/elasticsearch-reindex
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    elasticsearch重新索引

    一个完整的功能工具,可以轻松重新索引你的elasticsearch数据

    安装

    
    $ npm install -g elasticsearch-reindex
    
    
    
    

    在使用 /andnpm,安装它们,首先通过包管理器安装 node.js Installing

    用法

    快速启动

    只需运行以下命令重新索引你的数据:

    
    $ elasticsearch-reindex -f http://192.168.1.100:9200/old_index/old_type -t http://10.0.0.1:9200/new_index/new_type
    
    
    
    

    如果新索引 NAME 和类型 NAME 与旧索引相同,则可以省略 {new_index} 和 {new_type}

    
    $ elasticsearch-reindex -f http://192.168.1.100:9200/old_index/old_type -t http://10.0.0.1:9200
    
    
    
    

    如果你正在使用 Amazon Elasticsearch服务,你可以提供你的访问和密钥和区域。

    
    $ elasticsearch-reindex -f http://123.es.amazonaws.com -t http://10.0.0.1:9200 --region us-east-1 --access_key ABC --secret_key 123
    
    
    
    

    高级功能

    客户索引器

    有些时候,你可能需要根据自定义索引器脚本重新索引数据( 例如。 根据日期字段将数据重新索引为多个索引:。 定制索引器特性可以帮助你解决这种情况。

    若要使用这里功能,请创建自己的indexer.js

    var moment =require('moment');module.exports= {
     index:function(item, options) {
     return [
     {index:{_index:'tweets_'+moment(item._source.date).format('YYYYMM'), _type:options.type||item._type, _id:item._id}},
     item._source ];
     }
    };

    只要传递这个脚本的路径就可以了。

    
    $ elasticsearch-reindex -f http://192.168.1.100:9200/old_index/old_type -t http://10.0.0.1:9200/indexer.js
    
    
    
    

    自定义查询

    在 indexer.js 中添加自定义查询

    var moment =require('moment');module.exports= {
     query:{
     query:{
     term:{
     user:'Garbin' }
     }
     },
     index:function(item, options) {
     return [
     {index:{_index:'tweets_'+moment(item._source.date).format('YYYYMM'), _type:options.type||item._type, _id:item._id}},
     item._source ];
     }
    };

    然后

    
    $ elasticsearch-reindex -f http://192.168.1.100:9200/old_index/old_type -t http://10.0.0.1:9200/indexer.js
    
    
    
    

    只有garbin的用户数据将被索引

    并行并行索引的

    要重新索引一个非常大的索引,需要很长时间,你可以能需要使它更小并重新联系。 现在你可以使用"碎片"功能进行这里操作。

    var moment =require('moment');module.exports= {
     sharded:{
     field:"created_at",
     start:"2014-01-01",
     end:"2014-12-31",
     interval:'month'// day, week, or a number of day, such as 7 for 7 days. },
     index:function(item, options) {
     return [
     {index:{_index:'tweets_'+moment(item._source.date).format('YYYYMM'), _type:options.type||item._type, _id:item._id}},
     item._source ];
     }
    };

    分片配置将根据created_at字段将大索引转换成 12个碎片,并并行重新索引。

    然后

    
    $ elasticsearch-reindex -f http://192.168.1.100:9200/old_index/old_type -t http://10.0.0.1:9200/indexer.js
    
    
    
    

    带承诺的全文索引

    为保证数据来自数据库其他部分的数据提供了支持

    module.exports= {
     index:function (item, opts, client) {
     var indexData = {
     index: {
     _index:opts.index,
     _type:item._type,
     _id:item._id }
     };
     // With the client we can access other parts of our databasereturnclient.mget({
     index:'media',
     type:'movies',
     body: {
     ids:item._source.favoriteMovieIDs }
     }).then(function (response) {
     item._source.faveMovies=response.docs.map(function (movie) {
     return {
     name:movie._source.name,
     id:movie._source.id }; 
     });
     return [indexData, item._source];
     });
     }
    }

    然后

    
    $ elasticsearch-reindex -f http://192.168.1.100:9200/old_index/old_type -t http://10.0.0.1:9200/-m true indexer.js
    
    
    
    

    你将清楚地看到每个切分的重新索引进度

    尽情玩耍吧!

    许可证

    elasticsearch-reindex在 MIT许可证许可。


    相关文章