我想为一个网站实现搜索功能(假设它与SO类似)。我不想用谷歌搜索类似的东西。

我的问题是:

我该如何实施?

我知道有两种方法:

  1. 当用户提出查询时,搜索应用程序中的所有数据库。
  2. 索引我拥有的所有数据并将其存储在其他地方并从那里查询(就像谷歌所做的那样)。

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

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

有帮助吗?

解决方案

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

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

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

Lucene 会做你想要的事情(对搜索项建立索引),你必须跟踪 lucene 索引,但就性能而言,它比数据库搜索要好得多。顺便说一句,SO 搜索由 lucene 提供支持。:D

其他提示

这取决于您的网站的综合程度以及您想自己做的程度。

如果你正在运行一个 小网站 如果没有进一步添加自定义搜索的可能性,让谷歌来做这项工作(也许添加一个 站点地图)并使用 谷歌自定义搜索.

如果你运行一个 中等站点 使用 sql 引擎 使用 sql 引擎的搜索功能。

如果你运行一些 更重的软件堆栈 像 J2EE 或 .Net 使用 卢塞恩, ,一个伟大而强大的搜索引擎或其 .Net 克隆 lucene.Net

如果你想 从您的应用程序中抽象您的搜索 并能够使用 XML/HTTP 和 JSON API 以语言中立的方式查询它,看看 索尔. 。Solr 在后台运行 lucene,但为其添加了一个漂亮的 Web 界面。

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

解决此问题的最佳方法取决于您构建页面的方式。

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

索引方法的缺点是周转时间。有一些解决方法(比如谷歌的站点地图之类的东西),但它们也很复杂。

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

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

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

谷歌一下,你会发现很多!

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

有一些关于此的好文档,例如 这里.

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

如果您的应用程序使用 Java EE 堆栈并且您正在使用 休眠 你可以使用 指南针框架 维护数据库的可搜索索引。指南针框架使用 卢塞恩 在引擎盖下。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top