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

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

How do I implement Search Functionality in a website?

我想为网站实现搜索功能(假设它类似于SO)。 我不想使用Google搜索类似的内容。

我的问题是:

我该如何实施?

我知道两种方法:

  • 用户进行查询时,搜索应用程序中的所有数据库。
  • 为我拥有的所有数据建立索引,并将其存储在其他位置,然后从那里查询(例如Google所做的事情)。
  • 谁能告诉我要走哪条路? 优缺点都有什么?

    更好,有更好的方法吗?


    使用lucene,
    http://lucene.apache.org/java/docs/

    Apache Lucene is a high-performance, full-featured text search engine library written entirely in Java. It is a technology suitable for nearly any application that requires full-text search, especially cross-platform.

    它在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界面。


    您可能想看看xapian和omega前端。从本质上讲,它是一个可用来构建搜索功能的工具包。


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

    它具有所有基本功能,例如全文搜索,排名,排除并包括某些文件类型,您还可以通过html页面中的meta标签添加自己的meta信息。

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


    解决此问题的最佳方法取决于您如何构造页面。

    如果它们经常由许多不同的记录组成(如我想象的堆栈溢出页面),那么除非您进行大量工作来有效地重建数据库侧的页面,否则索引方法可能会产生更好的结果。

    使用索引方法的缺点是周转时间。有一些变通办法(例如Google的站点地图之类的东西),但变通也很复杂。

    如果您使用数据库路径,还应注意,如果现代搜索引擎系统具有要处理的链接数据,则它们的功能会更好,因此,找到一个可以理解数据库中"页面"之间链接的系统将起到积极作用。


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

    例如,这里有一些很好的文档可以找到。

    (也就是说,我喜欢在可能的地方建立索引,尽管它是一种优化,因此可能为时过早。)


    如果您的应用程序使用Java EE堆栈,而您正在使用Hibernate,则可以使用Compass Framework维护数据库的可搜索索引。 Compass Framework在后台使用Lucene。

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


    推荐阅读