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

时间:2020-03-05 18:44:57  来源:igfitidea点击:

我想为网站实现搜索功能(假设它类似于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

回答

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

回答

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

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

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

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

回答

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

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

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

回答

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

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

回答

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

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

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

回答

这取决于网站的全面程度以及我们想自己做多少。

如果我们经营的小型网站没有进一步添加自定义搜索的可能性,请让Google进行工作(也许添加站点地图),然后使用Google自定义搜索。

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

如果我们运行诸如J2EE或者.Net之类的较重软件堆栈,请使用Lucene(一个强大的强大搜索引擎)或者其.Net克隆lucene.Net。

如果要从应用程序中抽象搜索,并能够使用XML / HTTP和JSON API以语言无关的方式查询它,请查看solr。 Solr在后台运行lucene,但为其添加了一个不错的Web界面。