使用Solr等搜索短字段或使用直接DB索引

时间:2010-09-12 09:14:09

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

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

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

什么是更聪明的路线?

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

另外,如果我想在将来介绍拼写建议,这将如何影响我。

谢谢!

1 个答案:

答案 0 :(得分:0)

仅限数据库解决方案的专家:

  • 少设置和维护(您已有数据库)
  • 如果您想将搜索结果与其他数据一起加入或以其他方式操纵它们,您将能够在数据库中本地执行此操作
  • 没有时间延迟(如果您定期将Solr与数据库同步)或维护程序(如果您选择在Solr中实时添加/更新条目,则将它们插入数据库)

Solr解决方案的专家:

  • 性能:Solr处理缓存并且开箱即用
  • 拼写检查 - 如果你打算做拼写检查类型的东西Solr处理这个本地
  • 设置和调整Solr并不是很痛苦,尽管如果您熟悉Java应用程序服务器会有所帮助
  • 虽然你似乎有简单的要求,但我认为你正在寻找一些关于搜索单词的逻辑; Solr做得很好

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

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

我可以告诉你我们在网站上使用Solr并且我们喜欢它的性能,我们使用它来进行非常简单的查找。但是,我们缺少的一件事是将Solr数据与数据库数据相结合的方法。还有额外的维护。在一天结束时,没有一个简单的答案。