将Elasticsearch与PostgreSQL集成,同时使用带有水线ORM的Sails.js

我正在尝试将Elasticsearch与Sails.js集成,而我的数据库不是MongoDB:我使用PostgreSQL,所以这篇文章没有帮助。

我已经在我的Ubuntu盒子上安装了Elasticsearch,现在它已经成功运行了。 我也在我的Sails项目上安装了这个包 ,但是我不能在现有的模型上创build索引。

如何在我的模型上定义索引,以及如何在模型中使用Elasticsearch进行search?

我需要在模型中定义它的钩子是什么?

在这里,你可以find一个非常简单的软件包(帆 – 弹性)。 它直接从elasticsearch本身的configs中运行。

Elasticsearch文档和索引创build特别

有很多方法可以解决这个问题。 推荐的方法是使用我已经详细给出的elasticsearch使用logstash。 我将列出我在这里所了解的大部分方法:

  1. 使用Logstash

    curl https://download.elastic.co/logstash/logstash/logstash-2.3.2.tar.gz > logstash.tar.gz tar -xzf logstash.tar.gz cd logstash-2.3.2 

    安装jdbcinput插件:

     bin/logstash-plugin install logstash-input-jdbc 

    然后下载postgresql jdbc驱动程序。

     curl https://jdbc.postgresql.org/download/postgresql-9.4.1208.jre7.jar > postgresql-9.4.1208.jre7.jar 

    现在为logstash创build一个configuration文件,以使用jdbcinput作为input.conf:

     input { jdbc { jdbc_driver_library => "/Users/khurrambaig/Downloads/logstash-2.3.2/postgresql-9.4.1208.jre7.jar" jdbc_driver_class => "org.postgresql.Driver" jdbc_connection_string => "jdbc:postgresql://localhost:5432/khurrambaig" jdbc_user => "khurrambaig" jdbc_password => "" schedule => "* * * * *" statement => 'SELECT * FROM customer WHERE "updatedAt" > :sql_last_value' type => "customer" } jdbc { jdbc_driver_library => "/Users/khurrambaig/Downloads/logstash-2.3.2/postgresql-9.4.1208.jre7.jar" jdbc_driver_class => "org.postgresql.Driver" jdbc_connection_string => "jdbc:postgresql://localhost:5432/khurrambaig" jdbc_user => "khurrambaig" jdbc_password => "" schedule => "* * * * *" statement => 'SELECT * FROM employee WHERE "updatedAt" > :sql_last_value' type => "employee" } # add more jdbc inputs to suit your needs } output { elasticsearch { index => "khurrambaig" document_type => "%{type}" # <- use the type from each input document_id => "%{id}" # <- To avoid duplicates hosts => "localhost:9200" } } 

    现在使用上面的文件运行logstash:

     bin/logstash -f input.conf 

    对于要插入索引(数据库,此处为khurrambaig)的文档(表)types的每个模型,请使用适当的SQL语句(SELECT * FROM employee WHERE“updatedAt”>:sql_last_value here)。 在这里我使用sql_last_value只把更新的数据。 你也可以在logstash中做很多事情。 在这里,我正在使用每一分钟。 欲了解更多详情,请参阅

    要查看已经插入到索引中的特定types的文档,请执行以下操作:

     curl -XGET 'http://localhost:9200/khrm/user/_search?pretty=true' 

    这将列出我的案例客户模型下的所有文件。 看看弹性searchapi。 使用它。 或者使用nodejs官方客户端 。

  2. 使用jdbcinput

    https://github.com/jprante/elasticsearch-jdbc

    你可以阅读它的自述文件。 这很简单。 但是这并没有提供由logstash提供的调度和许多事情。

  3. 使用帆 – 有弹性

    您需要使用README中给出的多个适配器。

    但是这不被推荐,因为它会减慢你的请求。 对于每个创build,更新和删除,您将调用两个数据库:弹性search和postgresql。

    在logstash中,文档的索引与请求无关。 这种方法被许多人使用,包括维基百科。 你也保持独立于框架。 今天你正在使用sails,明天你可能会使用其他的东西,但是如果你仍然使用postgresql的话,在logstash的情况下你不需要改变任何东西。 (如果你改变分贝,即使那么很多数据库的input是可用的,如果从任何sql rdbms更改为另一个,只需要更改为jdbc驱动程序)

还有zombodb,但它目前只适用于pre 2.0弹性(也支持> ES 2.0)。