【问题标题】:Search Short Fields Using Solr, Etc. or Use Straight-Forward DB Index使用 Solr 等搜索短字段或使用直接数据库索引
【发布时间】:2010-09-12 09:14:08
【问题描述】:

我的网站存储 数百万 个实体。访问者通过键​​入仅包含在标题中的单词来搜索实体。标题最多 100 个字符

这不是经典文档搜索的情况,用户在大块中搜索。 字段非常短。此外,这里的主要问题是性能(而不是相关性),因为实体是“在您键入时”提供的(自动建议)。

更智能的路线是什么?

  • 创建一个 MySql 表 [word, entity_id],将 'word' 索引,然后使用查询
    从 search_index 中选择 entity_id where word like '[query_word]%
    这显然需要我将每个标题分解为其单词并为每个单词添加一行。
  • 使用 Solr 或一些类似的搜索引擎,根据我的阅读,它更倾向于全文搜索。

另外,如果我以后想介绍拼写建议,这会对我有何影响。

谢谢!

【问题讨论】:

    标签: mysql search full-text-search solr xapian


    【解决方案1】:

    仅数据库解决方案的专业人士:

    • 更少的设置和维护(您已经有一个数据库)
    • 如果您想将搜索结果与其他数据相结合或以其他方式对其进行操作,您可以在数据库中进行本机操作
    • 不会有时间延迟(如果您定期将 Solr 与数据库同步)或维护过程(如果您选择在 Solr 中实时添加/更新条目,无论您何时将条目插入数据库)

    Solr 解决方案的优点:

    • 性能:Solr 处理缓存并且开箱即用速度很快
    • 拼写检查 - 如果您打算进行拼写检查类型的东西,Solr 会在本机处理这个
    • Solr 的设置和调优不是很痛苦,但如果您熟悉 Java 应用程序服务器会有所帮助
    • 尽管您的要求似乎很简单,但我认为您已经掌握了围绕搜索单词的某种逻辑; Solr 在这方面做得很好

    您可能还需要考虑未来的要求(如果您的文档最终不仅仅是标题字段并且您想要分配某种相关性怎么办?如果您决定允许人们搜索这些实体的正文怎么办?和/或您想为其他文档类型(如 MS Word)编制索引?如果您想分面搜索结果怎么办?Solr 擅长所有这些)。

    我不确定您是否需要为数据库中的每个单词创建一个条目,而如果您要为每个单词创建记录,则只需 '%[query_word]%' 搜索。对于初学者来说,只使用数据库可能更简单,因为要求看起来很简单。扩展数据库性能应该相当容易。

    我可以告诉您,我们在现场使用 Solr,我们喜欢它的性能,甚至将它用于非常简单的查找。但是,我们缺少的一件事是将 Solr 数据与数据库数据相结合的方法。并且有额外的维护。归根结底,没有一个简单的答案。

    【讨论】:

    • 感谢您的详尽回答!在两边都使用 % 存在问题,因为只有在最左边的前缀已知时才使用索引。我认为您对未来要求的观点非常正确(例如,拼写检查)。我想我会试试 Solr :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2013-04-02
    • 2017-10-21
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2011-03-24
    相关资源
    最近更新 更多