我正在尝试将Firebase Flashlight与我的Node.js应用程序中的ElasticSearch集成,以便对我的Firebase集合进行搜索操作。我想在api.js
中定义我的搜索路线(例如:myhost: myport/ search/mycollection/:key
)。
问题在于myport
与运行ElasticSearch的那个不同(即9200)。
我希望路线:myhost: myport/whatever
运行我的应用,并在路线myhost: myport/ search/mycollection/:key
上运行myhost:9200
现在可用的搜索。
如何将它们集成到Express中?
当我配置ElasticSearch时,我使用:
var config = {
host: 'localhost',
port: 9200,
log: 'trace'
};
var esc = new ElasticSearch.Client(config);
答案 0 :(得分:1)
Elastic Search在与Express应用程序不同的端口上运行是正常的。实际上,您可以不在同一端口上运行两个服务器。
手电筒更像是一个不同的应用,您需要在服务器上运行。使用npm start
或npm monitor
,您可以在设置配置文件后启动Flashlight进程。手电筒将在弹性搜索中为您提供Firebase中的数据。
要与Elastic Search进行交互,您只需使用Node模块即可。你已经这样做了。正如您所提到的,Elastic Search将在端口9200
上运行,而Express应用程序将在不同的端口上运行(例如3000
)。
受到Flashlight的启发,我创建了Elasticfire,其中包含一些Flashlight没有的功能(例如联接),并且可以在您的应用中用作库。
const ElasticFire = require("elasticfire");
// Initialize the ElasticFire instance
let ef = new ElasticFire({
// Set the Firebase configuration
firebase: {
apiKey: "AI...BY",
authDomain: "em...d.firebaseapp.com",
databaseURL: "https://em...d.firebaseio.com",
storageBucket: "em...d.appspot.com",
messagingSenderId: "95...36"
}
// Firebase paths and how to index them in Elasticsearch
, paths: [
{
// Firebase path
path : "articles"
// Elasticsearch index and type
, index: "articles"
, type : "article"
// Optional joined fields
, joins: [
// The `author` is a field from the article
// which points to the `users` collection.
{
path: "users"
, name: "author"
}
// If we have an array of comment ids, pointing
// to another collection, then they will be joined too
, {
path: "comments"
, name: "comments"
}
]
// Filter out some data
, filter: (data, snap) => snap.key !== "_id"
}
]
});
// Listen for the events emitted by
// the ElasticFire instanceand output some data
ef.on("error", err => {
console.error(err);
}).on("index_created", name => {
console.log(`${name} created`);
}).on("index_updated", name => {
console.log(`${name} updated`);
}).on("index_deleted", name => {
console.log(`${name} deleted`);
});