我正在尝试将Elasticsearch与Sails.js集成,而我的数据库不是MongoDB:我使用的是PostgreSQL,所以这个post没有帮助。
我已经在我的Ubuntu盒子上安装了Elasticsearch,现在它已成功运行。我还在我的Sails项目中安装了此package,但我无法在现有模型上创建索引。
如何在模型上定义索引,如何在模型中使用Elasticsearch进行搜索?
我需要在模型中定义它的钩子是什么?
答案 0 :(得分:4)
Here你可以找到一个非常简单的包(帆弹性)。它直接来自elasticsearch本身的配置。
答案 1 :(得分:2)
有很多方法可以解决这个问题。推荐的方法是使用我已经详细给出的elasticsearch的logstash。 我会列出我在这里知道的大部分方法:
使用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。
使用jdbc输入
https://github.com/jprante/elasticsearch-jdbc
你可以阅读它的自述文件。这很简单。但是这并没有提供日程安排提供的日程安排和许多事情。
您需要使用README中给出的多个适配器。
但不建议这样做,因为它会降低您的请求速度。对于每次创建,更新和删除,您将调用两个dbs:弹性搜索和postgresql。
在logstash中,文档的索引与请求无关。包括维基百科在内的许多人都使用这种方法。您也保持独立于框架。今天你正在使用风帆,明天你可能会使用别的东西,但如果仍然使用postgresql,你不需要在logstash的情况下改变任何东西。 (如果更改数据库,即使这样,很多数据库输入都可用,如果从任何sql rdbms更改为另一个,您只需要更改为jdbc驱动程序)
还有zombodb,但它目前仅适用于pre 2.0弹性版(也支持&gt; ES 2.0)。