postgresql - postgres 全文搜索

标签 postgresql full-text-search

我正在做一个基于 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/

相关文章:

postgresql - 我要在这个数据库上索引什么?

postgresql - 如何使用 init.sql 在 Postgresql 中创建数据库、模式和表

sql - postgresql - 将单行更改为多行

elasticsearch - 如何在elasticsearch中索引问题和答案

c# - 关系数据库的全文搜索?

sql - Postgresql:仅当表不存在时如何创建表?

linux - 恢复 postgres 备份失败,并且/home/myuser 中出现一个具有奇怪名称的不可删除文件 (???2@þ>?yqus????>I?[蓝牙I??i?Ď)

search - 为没有 MySQL 数据库的简单网站添加搜索功能

mysql - 对部分匹配执行全文搜索,其中最短匹配在 MySQL 中具有最高相关性?

full-text-search - 全文搜索的最佳数据库是什么?