【发布时间】:2009-07-19 11:02:00
【问题描述】:
我正在做一个基于 asp.net mvc 框架的网络项目。作为 db 我正在使用 postgre SQL。问题是如何在我的应用程序中组织搜索。一种选择是使用 .net 库,例如 lucene.net。另一种选择是使用 Postgre 全文搜索。那么最好的选择是什么?
【问题讨论】:
标签: postgresql full-text-search
我正在做一个基于 asp.net mvc 框架的网络项目。作为 db 我正在使用 postgre SQL。问题是如何在我的应用程序中组织搜索。一种选择是使用 .net 库,例如 lucene.net。另一种选择是使用 Postgre 全文搜索。那么最好的选择是什么?
【问题讨论】:
标签: postgresql full-text-search
我没有在生产环境中运行过 postgres,但是我在一个测试数据库上使用过它,其中包含大量(我认为)数据。索引大约 600,000 行平均 3 个单词的文本字符串会创建一个 120MB 的全文索引。 在每个搜索词的第一个索引之后,查询非常快。看起来每个术语的索引必须从磁盘拉到内存中。我还没有找到一种在启动时将整个索引拉入内存的方法。一些最初的缓慢可能与磁盘 IO 有关,因为我在单个笔记本电脑 HD 上运行。我也不确定 120MB 的索引是否需要 120MB 或更多的 DB 内存。
对于生产应用程序,我们使用 Lucene for Java,它的性能非常好 - 具有几 GB 索引数据的亚秒级响应。我看到的 Lucene 的优点是 1)它独立于 DB 和 2)可分发。对于#1,这可能不是问题,但这意味着无论您的底层数据库是什么,您都可以使用相同的索引代码。对于#2,这取决于应用程序有多大。 Lucene(尤其是 Hadoop)被设计为多线程的,因此您可以将索引存储在共享驱动器上并让多台机器同时运行搜索(请注意,索引仍然是单线程的)。你是否想要这个取决于你的架构是什么。您希望拥有 1 个大型 DB 还是 1 个小型/中型 DB 以及一些支持它的小型索引服务器?
【讨论】: