Node.js 有没有好的索引/搜索引擎? [关闭]

Posted

技术标签:

【中文标题】Node.js 有没有好的索引/搜索引擎? [关闭]【英文标题】:Is there a good indexing / search engine for Node.js? [closed] 【发布时间】:2013-05-13 13:40:38 【问题描述】:

我正在为 node.js 应用程序寻找一个好的开源(使用 LGPL 或许可许可证)索引引擎,比如 Lucene。我正在寻找进程内索引和搜索,但对像 Sphinx 或 Solr 这样的索引服务器不感兴趣。

我也不害怕为 C/C++ 库创建绑定,所以我也愿意接受这些建议。

到目前为止我已经找到了

node-clucene 似乎不再积极维护(并且有几个未解决的问题) 我可以为 CLucene 创建自己的绑定,但它似乎很少维护,而且它的当前版本也远远落后于 Java Lucene Apache Lucy 似乎旨在为动态语言创建绑定,但到目前为止它们没有节点绑定(也没有 C API),我还没有找到任何关于创建的文档绑定。我也没有找到任何关于其性能的基准。 node-search 好像被放弃了 jsii 似乎还是个原型,也被废弃了 fullproof,仅用于在网络浏览器中运行 lunr.js 似乎只允许序列化整个索引,因此不可扩展

我可以“自己动手”,但我更喜欢使用现有的解决方案。

编辑:为什么我对独立的索引服务器不感兴趣:我使用一个快速的进程内键值存储数据库,所以不得不退出会很浪费查询过程。

【问题讨论】:

【参考方案1】:

只是对我之前回答的更新 - 因为讨论太多了,我不希望这个更新丢失。

你可以下载它 here:

【讨论】:

简短回答:否;更长的答案:Forage 对文档相关性进行分类,并让所有者简单而强大地控制相关性的确定程度;最长的答案:Forage 不支持对抽象字段进行排序,因为这被视为超出了项目的核心范围。但是,可能在将来的某个时候会添加排序功能,因为有需求。 如何计算文档相关性? 哇,@user2020565!可以从多个进程中完全访问草料 :) It appears你隶属于norch。请注意,我们的self-promotion policy 要求您在像这样的答案中披露此信息,并且您不得在大部分帖子中提及该产品。 @josliber 我不愿提及这一点,但要郑重声明:Norch 是一个开源项目,我和其他人利用业余时间造福人类,因为它是非商业性的在我的 GitHub 用户名下。至于“很大比例的帖子”,那是不正确的,但我们当然会做(非常少量)有意识的工作,这相当于 *** 上的少数帖子。【参考方案2】:

是的,看看新发布的Norch

Norch 基于 node.js 的 search-index 模块,该模块又基于 Google 强大的 levelDB 索引。

编辑:使用search-index module 获得快速“进程内”搜索功能。

【讨论】:

Norchsearch-index 之上添加了什么? Norch 使搜索索引在 HTTP 上可用,并添加了一些其他 GUI 内容。 话虽如此,search-index 可能对我有用,但它似乎与 LevelDB 联系得太紧密了:( 为什么 LevelDB '不好'? It appears你隶属于norch。请注意,我们的self-promotion policy 要求您在此类答案中披露此信息,并且您不得在大部分帖子中提及该产品。【参考方案3】:

您能解释一下为什么您对使用外部索引不感兴趣吗?对于全文搜索,我总是恢复使用 PostgreSQL 的全文索引功能——它非常快,索引不需要全索引更新(像 Solr 那样),并且结果返回速度比基于 Lucene 的解决方案(例如 Elastic Search )。

但如果你真的想在进程中进行,你可能想看看 Lunr:http://lunrjs.com/ - 它确实在 Node 中工作,而不仅仅是在浏览器中。

编辑:这是我在 Postgres 上比 Lucene 更快的统计数据:http://fr.slideshare.net/billkarwin/full-text-search-in-postgresql - 请参阅幻灯片 49。

编辑:不确定您正在寻找什么样的速度进/出进程,但我们的 PostgreSQL 数据库每秒可以执行 10 万次查询而不会出汗,甚至在 SSD 上也不行。也许您过度考虑了您的性能需求 - 毕竟一旦您需要转到多个节点(或使用集群来利用所有 CPU),您无论如何都需要在进程中转储。

【讨论】:

" 并且结果的返回速度比基于 Lucene 的解决方案(例如 Elastic Search)要快。”有任何基准来支持这一点吗?我几乎可以肯定大多数评论都会反过来。 为了它的速度,我使用了一个非常快的进程内数据库。因此,拥有进程外索引会变得非常荒谬。 我查看了 lunr,是的,但它目前不支持持久化索引而不必一直序列化整个索引。 +1 推荐使用 fti,尤其是当您的数据源是 rdbms 时。有时,近在咫尺的解决方案可以让您摆脱困境。 @booyaa 我的数据源不是 RDBMS。【参考方案4】:

全文搜索灯,是一个纯 JS 编写的节点模块,用于进行全文搜索。 在这里可以找到当前的git仓库链接:https://github.com/frankred/node-full-text-search-light

【讨论】:

以上是关于Node.js 有没有好的索引/搜索引擎? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Jade 和 EJS 对于 Node.js 模板的优缺点是啥? [关闭]

我应该使用哪个 Node.js 路由器? [关闭]

学习用Node.js和Elasticsearch构建搜索引擎:实际项目中常用命令使用记录

什么是最可靠和最流行的 Node.js 模板引擎? [关闭]

node.js 入门请推荐本好的入门书籍?

哪个数据库引擎最适合 node.js 应用程序? [关闭]