将Sails.js与Waterline ORM结合使用时,将Elasticsearch与PostgreSQL集成

时间:2016-06-02 18:58:53

标签: node.js postgresql elasticsearch sails.js

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

我已经在我的Ubuntu盒子上安装了Elasticsearch,现在它已成功运行。我还在我的Sails项目中安装了此package,但我无法在现有模型上创建索引。

如何在模型上定义索引,如何在模型中使用Elasticsearch进行搜索?

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

2 个答案:

答案 0 :(得分:4)

Here你可以找到一个非常简单的包(帆弹性)。它直接来自elasticsearch本身的配置。

Elasticsearch docsindex creation in particular

答案 1 :(得分:2)

有很多方法可以解决这个问题。推荐的方法是使用我已经详细给出的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
    

    安装jdbc输入插件:

    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创建一个配置文件,使用jdbc输入作为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)的每个模型,请使用适当的SQL语句(SELECT * FROM employee WHERE&#34; updatedAt&#34;&gt;:sql_last_value这里)。这里我使用sql_last_value只放置更新的数据。您也可以在logstash中安排调度和许多内容。我在这里每分钟都在使用。有关详细信息,请参阅this

    要查看已插入特定类型索引的文档:

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

    这将列出我案例的客户模型下的所有文件。看看弹性搜索API。用那个。或者使用nodejs official client

  2. 使用jdbc输入

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

    你可以阅读它的自述文件。这很简单。但是这并没有提供日程安排提供的日程安排和许多事情。

  3. 使用sails-elastic

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

    但不建议这样做,因为它会降低您的请求速度。对于每次创建,更新和删除,您将调用两个dbs:弹性搜索和postgresql。

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

  4. 还有zombodb,但它目前仅适用于pre 2.0弹性版(也支持&gt; ES 2.0)。