couchdb 同步数据到elasticsearch建索引


应用场景:数据以文档的形式保存于couchdb,现在需要导入到elasticsearch建索引以支持全文检索。

不要去想着从couchdb读数据,然后调elasticsearch接口建索引了。logstash能很方便的完成你想要的工作,你所要做的工作就是装上logstash。 然后在conf里面写一个配置文件。比如db2es.conf .

 input {
  couchdb_changes {
      db => "media"
      host => "192.168.0.70"
      port => 5984
      codec => "json"
      username => "rdd"
      password => "rdd1qaz2wsx"
      initial_sequence => 0 #this is only required for the an initial indexing
      #keep_revision=>true
  }
}

output {
  elasticsearch{
      #action => "%{[@metadata][action]}"
      action =>"index"
      document_id => "%{[@metadata][_id]}"
      hosts => "192.168.0.70:9200"
      #index => "monitor-%{+YYYY.MM.dd}"
      index => "media"
      document_type => "doc"
    }

  if [@metadata][action] == "delete" {
    elasticsearch{
      action => "%{[@metadata][action]}"
      #action =>"index"
      document_id => "%{[@metadata][_id]}"
      hosts => "192.168.0.70:9200"
      #index => "monitor-%{+YYYY.MM.dd}"
      index => "media"
      document_type => "doc"
    }
  }
    
    #stdout {} #enable this option for debugging purpose
}

接下来就是运行命令

bin/logstash agent -f conf/db2es.conf &

这个配置文件比较好用了。通过action可以轻松的创建和删除索引。通过引用couchdb的document_id可以防止重复建索引。
当然它本身是根据couchdb的字段类型在elasticsearch里面建索引的,比如支持时间类型,但是couchdb似乎对时间类型的支持不太好,始终是以utc+0创建时间字段,所以在数据进入couchdb的时候最好先做处理。比如你存储的时间是UTC+8, couchdb会自动减去8小时作为你的存储时间。那么你在导入couchdb之前就要把时间多加上8小时,这样couchdb减去8小时后就正好是你想要的时间。再不然就需要在同步到elasticsearch的时候处理一下以保证索引时间在正确的时区。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容