如何在网站中实现搜索功能?

如何在网站中实现搜索功能?

问题描述:

我想为网站实现搜索功能(假设它与SO相似)。我不想使用谷歌搜索那样的东西。如何在网站中实现搜索功能?

我的问题是:

如何实现这一点?

有两种方法,我所知道的:

  1. 搜索中的所有应用程序数据库,当用户给他的查询。
  2. 将我拥有的所有数据索引并存储到其他地方并从那里查询(如Google所做的那样)。

谁能告诉我哪条路要走?优缺点都有什么?

更好,有没有更好的方法来做到这一点?

利用Lucene,
http://lucene.apache.org/java/docs/

Apache Lucene是一个高性能,全功能的文本搜索引擎完全用Java编写库。它几乎适用于任何需要全文搜索的应用程序,尤其是跨平台的应用程序。

它在java和.net中可用。它也可以在PHP中以zend框架模块的形式提供。

Lucene做你想做的(索引搜索到的项目),你必须跟踪一个lucene索引,但是它比在性能方面进行数据库搜索好得多。 BTW,SO搜索由lucene提供支持。 :D

+0

如果你正在考虑Lucene,你应该看看Solr项目。把它想象成Lucene作为服务 – sclarson 2013-03-06 03:24:38

您可能想看看xapianomega前端。它本质上是一个可以构建搜索功能的工具包。

解决此问题的最佳方法将取决于您如何构建网页。

如果它们经常是由很多不同的记录构成的(就像我想象的堆栈溢出页面一样),索引方法可能会带来更好的结果,除非您在有效重构数据库页面方面投入了大量工作侧。

您使用索引方法的缺点是转身时间。有解决方法(如谷歌的网站地图的东西),但他们也很复杂,以确保正确。

如果你使用数据库路径,也应该意识到,如果现代搜索引擎系统有链接数据进行处理,它的功能要好得多,因此找到一个能够理解数据库中'网页'之间链接的系统会产生积极的影响。

这与您的问题有点正交,但我强烈建议使用RESTful搜索。也就是说,要执行从未执行的搜索,网站会将查询POST到/ searching /。要重新进行搜索,网站GETs/searches/{some id}

有一些很好的文档可以找到,例如here

(这么说,我喜欢索引如果可能的话,虽然它是一个优化,从而可过早。)

如果应用程序使用Java EE栈和你正在使用Hibernate可以使用Compass Framework维护数据库的可搜索索引。指南针框架使用Lucene

唯一的问题是您无法复制您的搜索索引。因此,您需要使用群集数据库来保存索引表或使用已添加到Compass Framework 2.x中的较新的基于网格的索引存储机制。

如果您在Microsoft平台上,则可以使用索引服务。这与IIS网站非常容易集成。

它具有全文搜索,排名,扩展和包含某些文件类型等所有基本功能,您也可以通过元标记在html页面中添加自己的元信息。

做一个谷歌,你会发现吨!

这取决于你的网站有多全面以及你想做多少事情。

如果您运行的是一个小网站没有进一步的可能性,添加自定义搜索,让谷歌做的工作(也许增加一个sitemap),并使用google custom search

如果您使用sql引擎运行中型网站,请使用您的sql引擎的搜索功能。

如果您如果您从您的应用程序要抽象搜索运行像J2EE或.NET中使用Lucene,一个伟大的,功能强大的搜索引擎或者其净克隆lucene.Net

一些较重的软件堆栈和能够用XML/HTTP和JSON API以中性语言的方式查询它,看看solr。 Solr在后台运行lucene,但增加了一个漂亮的网页界面。

+3

我对此有疑问。我可以实施谷歌自定义搜索的Intranet网站?如果我这样做,我是否将我的公司置于危险之中?我宁愿不写我自己的逻辑。 – Richie 2014-03-04 01:38:48