database - 我应该只查询数据库还是使用适当的搜索引擎解决方案?

标签 database search solr

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

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

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

最佳答案

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

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

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

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

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

分面/导航器:我的搜索中有多少文档在字段 xyz 中具有不同的值,它们的计数是多少?您可能在许多站点上都看到过此功能,例如“按文件类型过滤”、“仅显示最近 7 天、最近 31 天、最近 365 天的点击”等,以及每个 bin 的文档计数。

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

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

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

关于database - 我应该只查询数据库还是使用适当的搜索引擎解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25098448/

相关文章:

sql - 缺少右括号 ORA-00907

javascript - 如何在 Object 中搜索在数组中也有值的值?

Tomcat 工作但 Solr 不工作

c# - 我可以重复使用 Tridion 附带的 SOLR 实例吗?

indexing - Solr 的 SnowballPorterFilterFactory 和 Wildcard 参数

php - 如何使用 array_count_values() 和 mySQL 来统计值的出现次数

python - Django 无法使用原子事务的 try-exception block 回滚

php - Laravel 原始查询分页;对 Eloquent 对象的原始查询

c - 如何搜索、查找和打印用户给出的单词的索引?

search - Google 表单搜索和提取电子表格数据