【问题标题】:Yii2: How should site-wide search work?Yii2:站点范围的搜索应该如何工作?
【发布时间】:2017-02-08 12:12:08
【问题描述】:

在 Yii2 中实现站点范围搜索的最佳实践方法是什么?

这个问题不是关于如何具体实现搜索,而是关于使用什么样的方法。我们应该使用狮身人面像吗?弹性搜索?还是我们使用 UNION 选择将数据放入 DataProvider 中?

假设应用程序使用关系数据库来存储数据。我们想要搜索并显示多个不同的模型。例如,我们的数据库包含书籍、作者和商店的表格。当我们搜索 关键字 时,我们希望显示所有 3 个表的结果(按标题或内容匹配图书、按全名匹配作者和按名称匹配商店等)。

tutorials 展示了如何使用 Elasticsearch 但假设我们的数据存储在 Elasticsearch 数据库中,这是没有意义的。我们的数据已经存储在 MySQL 或 PostgreSQL 中。意思是不是 我们需要在 Elasticsearch 数据库中维护我们的数据的副本吗?

【问题讨论】:

  • 您找到了最好的方法吗?我期待着看看你的经验是什么
  • @farrusete 似乎没有单一的“正确方式”。我找到了一些将 MySQL 与 Elasticsearch 同步的方法(即 jdbcriver),但它看起来非常复杂,所以我自己从未尝试过。

标签: search yii2


【解决方案1】:

在 Yii2 中实现站点范围搜索的最佳实践方法是什么?

这取决于许多因素,因此我无法针对您的情况为您提供具体建议。需要考虑的一些因素是:

  1. 您希望通过此搜索实现什么目标?您数据库中的每一点都是重要的搜索词吗?
  2. 您只需要全文搜索还是广泛的分析?
  3. 您对时间或成本有任何限制吗?
  4. 您的(技术)基础设施能否处理您的想法?
  5. 是否值得在项目中引入另一项广泛的技术?
  6. 您能否处理额外的维护任务来运行这样的搜索引擎?
  7. 还有更多...

在我使用 PostgreSQL RDBMS 的内部 Yii2 项目中,我决定使用名为 tsvector 的 PostgreSQL 文本搜索类型。这足以满足我的需求。为什么?

  1. 您可以使用Stemming
  2. 支持模糊搜索。
  3. 支持基本排名。
  4. 支持多种语言。

我强烈推荐这篇博文Postgres full-text search is Good Enough

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 2016-02-10
    • 2011-04-20
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多