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