0

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

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

更智能的路线是什么?

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

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

谢谢!

4

1 回答 1

0

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

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

Solr 解决方案的优点:

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

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

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

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

于 2010-09-13T17:31:46.003 回答