【问题标题】:Should i just query the database or use a proper search engine solution?我应该只查询数据库还是使用适当的搜索引擎解决方案?
【发布时间】:2014-09-25 17:34:53
【问题描述】:

我有一个新闻网站,最终会有很多文章。我需要实现搜索功能,并且我知道 solr 是当今用于实现此功能的最流行的软件解决方案之一。

该网站可能会或可能不会获得大量流量,但我必须实现专为流量大的网站设计的搜索功能。

使用像 solr 这样的搜索引擎而不是仅仅在数据库 (mysql) 中查询内容并将其显示给用户有什么好处?仅仅是因为像 solr 这样的搜索引擎产品在搜索方面具有卓越的性能,而且(根据我所阅读的内容)在搜索方面具有更大的灵活性吗?我不是在寻找诸如“使用 solr”之类的答案,而是在寻找关于为什么不使用数据库的解释。

【问题讨论】:

    标签: database search solr


    【解决方案1】:

    他们解决不同的问题。为搜索而设计的应用程序具有与传统数据库(SQL 和 NoSQL 变体)不同的核心功能集,因为要求不同,它们的用法也不同。

    目前与搜索相关的数据库功能之间存在一些重叠,但如果我们使用标准数据库交互作为开始,编写“查找包含这三个词的文章”是一项您必须手动处理的任务解决。添加您通常希望使搜索性能良好并为您的用户提供相关结果的所有其他内容,您遇到的问题与常规数据库试图解决的问题截然不同。

    面向搜索的服务做得更好的一些功能:

    术语和字段权重:如果您在“标题”中有匹配项,则其权重应高于“文本”中的匹配项。但是您也可能有一个“旧度”因素影响分数,因此根据用例,可以调整字段和特征之间的所有这些权重,以解决您遇到的几乎所有问题。

    文本规范化和处理:您可能希望在编制索引时扩展同义词。搜索 ipod 和 i-pod 可能会给出相同的结果。窗户和窗户也是如此。这些操作是大多数文档搜索引擎的基础。您可能希望允许一个字段执行语音匹配(单词的发音而不是它们的书面形式),并且您可能希望以与完全匹配不同的方式进行评分。 Solr's list of analyzers, tokenizers and filters 可能会让您了解一些可用于文本处理的功能。

    Faceting / Navigators:我的搜索中有多少文档在字段 xyz 中有不同的值,它们的计数是多少?您可能已经在许多网站上看到过此功能,例如“按文件类型过滤”、“仅显示过去 7 天、过去 31 天、过去 365 天的点击次数”等,以及每个 bin 的文档计数。

    突出显示:匹配文本的哪一部分,并提取适当的 sn-p,我可以将其返回给最终用户以显示。每次进行 Google 搜索时,您都会看到此功能,并且命中下方的文本显示了您的查询所在网页的实际内容。

    .. 这些只是从事搜索工作的人们每天都在考虑的一些功能。我并不是说这些不能通过更传统的 DB 功能来解决,但它们需要你实现代码,保持同步,一般来说,编写大量代码来获得你可以通过技术免费获得的东西已经解决了问题。

    性能取决于很多因素,但它可能会比 OK 做得更好。您可以水平扩展大多数解决方案,以便在增长的同时根据需要添加服务器。但是您可能暂时不必这样做,所以不要担心。过早的优化等。

    【讨论】:

    • 感谢您的精彩解释,与 DB 相比,使用 seach 产品似乎可以免费获得很多,而且您还可以提取两者。我想搜索引擎专注于他们所做的事情,因此除了其他情况之外,仅凭这一点就可能具有性能优势。
    • 这是一个有趣的话题。我需要根据值进行过滤——而不是在文本块中搜索单词。所以,我想知道在我的案例中使用搜索引擎是否有任何好处。我正在使用的工具推荐 Solr,但我无法想象它比仅在查询中添加“WHERE size='XL'”更好。
    • @halfnibble 这取决于。如果您要执行文档搜索引擎擅长的任何其他事情(例如方面),它可能仍然是一个很好的解决方案。如果您只是要根据该行是否作为某个列中的某个值返回行,则关系 DBMS 可能会更好地完成这项工作(只要将正确的索引添加到表中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2014-05-23
    • 2016-12-29
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多