Google喜欢搜索字符串解析为sql

时间:2011-11-04 22:33:10

标签: postgresql solr lucene indexing full-text-search

假设我有一个带有postgres数据库的Web应用程序。我想添加谷歌搜索字符串(abc + site:xyz + size> 800-pqrs)。所以这个字符串会生成一个用于从数据库返回结果的sql。要搜索的表基本上是具有关系数据的键值存储。可能有不同的方法来做到这一点。

自己解析/标记用户查询并生成sql或使用postgresql中的lucene或tsearch2。不确定哪一个是更好的方法。但我倾向于lucene。 如果我使用lucene,我可以在db中创建索引还是驻留在文件系统上?没有为lucene的最新版本找到任何好的教程。

我可以在当前的网络应用中使用solr,还是必须将其作为单独的服务器实例运行并针对它发出查询? 一些有用的链接将是很有帮助的。

1 个答案:

答案 0 :(得分:2)

  

自己解析/标记用户查询并生成sql

在大多数情况下,这是丑陋且容易出错的,但在某些情况下并非如此糟糕。如果数据库相对较小且架构是静态的,并且搜索的字段(例如列)不多 - 这可能没问题。

  

或使用postgresql中的lucene或tsearch2。不确定哪一个是更好的方法

一般来说,专用FTS更好。

你做过“家庭作业”并在网上花些时间吗?请搜索“postgresql lucene”或“postgreSQL FTS”并阅读前5个结果。从Bill Karwin的优秀演讲开始:http://www.slideshare.net/billkarwin/full-text-search-in-postgresql

哪种方法更好,这取决于许多因素,包括:

  • 您是否使用J2EE?
  • 您想要最低限度的维护还是最高性能?
  • 什么是数据库使用模式,从读/写比率开始?
  

如果我使用lucene,我可以在db中创建索引还是驻留在文件系统上?

大多数FTS解决方案(包括Lucene / Solr)都使用自己的静态索引文件在数据库外部。这对于非关系数据来说更好。

  

我可以在当前的网络应用中使用solr,还是必须将其作为单独的服务器实例运行并针对它发出查询?

在此处回答:http://lucene.apache.org/solr/#intro