【问题标题】:How do I implement Search Functionality in a website? [closed]如何在网站中实现搜索功能? [关闭]
【发布时间】:2010-09-07 06:03:29
【问题描述】:

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

我的问题是:

我该如何实现?

我知道有两种方法:

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

谁能告诉我该走哪条路?有什么好处和坏处?

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

【问题讨论】:

  • 惊讶地看到这个热门问题被关闭了。现在是 2020 年,我认为这个问题值得重新审视。大多数答案都推荐 Lucene,但我建议查看 Typesense:github.com/typesense/typesense。它是一个轻量级且易于使用的搜索引擎。对于日志等海量数据集,有 ElasticSearch:elastic.co

标签: search


【解决方案1】:

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

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

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

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

【讨论】:

  • 如果您正在考虑使用 Lucene,您应该真正了解 Solr 项目。将其视为 Lucene 即服务
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    索引方法的缺点是周转时间。有一些变通方法(比如 Google 的站点地图),但它们也很复杂。

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

    【讨论】:

      【解决方案4】:

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

      有一些关于此的好文档,例如here

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            【解决方案7】:

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

            如果您正在运行一个小型网站而无法进一步添加自定义搜索,请让 google 完成这项工作(可能添加sitemap)并使用google custom search

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

            如果您运行一些更重的软件堆栈,例如 J2EE 或 .Net,请使用 Lucene,这是一个强大的搜索引擎或其 .Net 克隆 lucene.Net

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

            【讨论】:

            • 我对此有疑问。我可以为 Intranet 网站实施谷歌自定义搜索吗?如果我这样做,是否会使我的公司面临风险?我宁愿不写自己的逻辑。
            • google 自定义搜索已被杀死 btw。我认为微软有 Bing 的替代方案。
            猜你喜欢
            • 2021-04-22
            • 1970-01-01
            • 2010-11-18
            • 2011-03-02
            • 2016-10-23
            • 1970-01-01
            • 1970-01-01
            • 2021-01-08
            相关资源
            最近更新 更多