假设我有一个带有postgres数据库的Web应用程序。我想添加谷歌搜索字符串(abc + site:xyz + size> 800-pqrs)。所以这个字符串会生成一个用于从数据库返回结果的sql。要搜索的表基本上是具有关系数据的键值存储。可能有不同的方法来做到这一点。
自己解析/标记用户查询并生成sql或使用postgresql中的lucene或tsearch2。不确定哪一个是更好的方法。但我倾向于lucene。 如果我使用lucene,我可以在db中创建索引还是驻留在文件系统上?没有为lucene的最新版本找到任何好的教程。
我可以在当前的网络应用中使用solr,还是必须将其作为单独的服务器实例运行并针对它发出查询? 一些有用的链接将是很有帮助的。
答案 0 :(得分:2)
自己解析/标记用户查询并生成sql
在大多数情况下,这是丑陋且容易出错的,但在某些情况下并非如此糟糕。如果数据库相对较小且架构是静态的,并且搜索的字段(例如列)不多 - 这可能没问题。
或使用postgresql中的lucene或tsearch2。不确定哪一个是更好的方法
一般来说,专用FTS更好。
你做过“家庭作业”并在网上花些时间吗?请搜索“postgresql lucene”或“postgreSQL FTS”并阅读前5个结果。从Bill Karwin的优秀演讲开始:http://www.slideshare.net/billkarwin/full-text-search-in-postgresql
哪种方法更好,这取决于许多因素,包括:
如果我使用lucene,我可以在db中创建索引还是驻留在文件系统上?
大多数FTS解决方案(包括Lucene / Solr)都使用自己的静态索引文件在数据库外部。这对于非关系数据来说更好。
我可以在当前的网络应用中使用solr,还是必须将其作为单独的服务器实例运行并针对它发出查询?