我想为网站实现搜索功能(假设它类似于SO)。我不想使用Google搜索类似的内容。
我的问题是:
我该如何实施?
我知道两种方法:
- 用户进行查询时,搜索应用程序中的所有数据库。
- 为我拥有的所有数据建立索引,并将其存储在其他位置,然后从那里查询(例如Google所做的事情)。
谁能告诉我要走哪条路?优缺点都有什么?
更好,有更好的方法吗?
我想为网站实现搜索功能(假设它类似于SO)。我不想使用Google搜索类似的内容。
我的问题是:
我该如何实施?
我知道两种方法:
谁能告诉我要走哪条路?优缺点都有什么?
更好,有更好的方法吗?
Answers:
使用lucene,
http://lucene.apache.org/java/docs/
Apache Lucene是完全用Java编写的高性能,功能齐全的文本搜索引擎库。它是一项适用于几乎所有需要全文本搜索的应用程序的技术,尤其是跨平台的应用程序。
它在Java和.net中可用。它也可以通过zend框架模块的形式在php中使用。
Lucene完成了您想要的工作(为搜索到的项目建立索引),您必须跟踪Lucene索引,但是就性能而言,它比进行数据库搜索要好得多。顺便说一句,SO搜索由Lucene提供支持。:D
这取决于您的网站的全面程度以及您想自己做多少。
如果您经营的是一个小型网站,没有进一步添加自定义搜索的可能性,请让google完成工作(也许添加站点地图),然后使用google自定义搜索。
如果您使用sql引擎运行中型站点,请使用sql引擎的搜索功能。
如果您运行诸如J2EE或.Net等较重的软件堆栈,请使用Lucene(一个强大的强大搜索引擎)或其.Net克隆lucene.Net。
如果要从应用程序中抽象搜索,并能够使用XML / HTTP和JSON API以语言中立的方式对其进行查询,请查看solr。Solr在后台运行lucene,但为其添加了一个不错的Web界面。
如果您的应用程序使用Java EE堆栈,而您正在使用Hibernate,则可以使用Compass Framework维护数据库的可搜索索引。Compass Framework在后台使用Lucene。
唯一的问题是您无法复制搜索索引。因此,您需要使用群集数据库来保存索引表,或者使用已经添加到Compass Framework 2.x中的更新的基于网格的索引存储机制。