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