何时考虑Solr

And*_*ume 32 mysql performance solr

我正在开发一个需要通过搜索做有趣事情的应用程序,包括全文搜索,点击突出显示,分面搜索等...

数据集可能在3000-10000个记录之间,每个记录有20-30个字段,并且全部存储在MySQL中.该网站的流量配置文件很可能是中等规模的.

所有这些要求都可以在MySQL中实现(笨拙地),但在什么时候(就数据大小和流量水平而言)是否值得研究像Solr或Sphinx这样的更集中的技术?

The*_*can 43

这个问题需要在各个方面得到非常广泛的答案.对于特殊用例,有一些非常确定的特定可能使一个系统优于另一个系统,但我想在此处介绍基础知识.

我将完全处理Solr作为几个功能大致相同的搜索引擎的示例.

我想从一些事实开始:

  • 您不能依赖Solr/Lucene作为安全数据库.有一个事实列表,但它们主要包括缺少恢复选项,缺少酸交易,可能的复杂性等.如果您决定使用solr,则需要从其他源(如SQL表)填充索引.事实上,solr非常适合存储包含来自多个表和关系的数据的文档,否则将需要构建复杂的连接.

  • Solr/Lucene提供令人兴奋的文本分析/词干/全文搜索评分/模糊功能.你不能用MySQL做的事情.事实上,MySql中的全文搜索仅限于MyIsam,评分非常简单且有限.加权字段,提升某些指标的文档,根据短语接近度得分结果,匹配准确等等几乎是不可能的.

  • 在Solr/Lucene你有文件.你不能真正存储关系和过程.那么你当然可以在一些文档的多值字段中索引其他文档的键,这样你就可以实际存储1:n关系,并且两种方式都可以获得n:n,但是它的数据开销.不要误解我的意思,它可以很好地用于许多目的(例如,对于某些产品目录,您希望存储产品的分销商,并且您只想搜索某些经销商或某些部件可用的部件).但是你用HAS/HAS NOT来达到可能性的终点.你可以不做"获得至少3个经销商提供的所有产品"之类的事情.

  • Solr/Lucene具有非常好的刻面功能和后期搜索分析.例如:在有40000次点击的非常广泛的搜索之后,您可以显示如果您将搜索细化为具有此字段此值并且该值为该字段的组合,您将只获得3次点击.在MySQL中需要额外查询的东西是高效且方便的.

所以我们总结一下

  • Lucene的力量是文本搜索/分析.由于反向索引结构,它也令人心旷神怡.你可以真正做很多后期处理并满足其他需求.虽然它是面向文档的,并且没有像使用SPARQL的三重存储那样的"图形查询",但基本的N:M关系可以存储和查询.如果你的应用程序专注于文本搜索,那么你应该选择Solr/Lucene,如果你没有充分的理由,比如非常复杂的多维范围过滤查询,那么就不应该这样做.

  • 如果您没有文本搜索,而是可以指向并单击某些内容但不输入文本的内容,那么旧的关系数据库可能是更好的方法.

  • 这是一个全面的答案......我要补充的一点是,由于上述原因,MySQL + SOLR是一个很好的组合.有很多方法可以将数据从MySQL传输到SOLR中,您可能希望对其进行研究.我无法想象不会在MySQL驱动的网站上提供SOLR搜索服务,一旦你看到了方面的力量,就没有回头路了. (2认同)

小智 9

使用Solr如果:

  • 您不想强调数据库.
  • 获得真正的全文搜索.
  • 执行快速搜索结果.

我目前维护着一个每月有500万用户的新闻网站,其中MySQL作为主数据存储区,Solr作为搜索引擎.


Bay*_*Max 5

Solr就像magick一样用于全文本索引,而Mysql很难实现。可以将Mysql和Solr混合使用:Mysql用于CRUD操作,而Solr用于搜索。
我以前曾与印度最好的房地产在线分类门户网站之一合作,该门户网站使用Solr进行搜索(以前使用过Mysql)。迁移减少了搜索时间。
Solr可以轻松地与Mysql集成:

  • Solr Full Dataimport可用于将数据从Mysql表导入到Solr集合中。
  • 可以以较短的频率安排Solr Delta导入,以将最新数据从Mysql加载到Solr集合。