代码之家  ›  专栏  ›  技术社区  ›  Ke.

solr facets与mysql关系模式

  •  4
  • Ke.  · 技术社区  · 14 年前

    我有兴趣了解在solr/mysql/app设置中查询solr的最佳/最快(最有效)方法。我有一个mysql数据库,在关系模式中有一个大的主表和几个小表。我也在构建一个应用程序,它使用层次结构并基于相关表中的数据构建菜单。

    我一开始只是在mysql中这样做,但很快发现(使用大量数据)mysql在使用与主表的连接等(甚至在使用mysql索引时)计算这些相关数据的计数时可能非常慢。目前我采用的方法是用solr索引主表,并将较小的相关表保存在mysql中。对于每个菜单项,我都会在运行时查询solr以获取计数,这感觉很慢。

    是否更快/更好地:

    1.)将相关表保存在mysql中,同时为相关表中的每一行设置facet。当我查询主表时,以某种方式将它们链接在一起?这听起来是最快的选择,但在我的应用程序中可能会很棘手(必须匹配两个不同的数组)。

    2)将相关表保存在mysql中,运行时调用/统计主索引表中每个相关项的数据。例如,对于品牌菜单,我需要得到每个品牌的计数,要求我将每个菜单项作为查询发送给solr(以获得计数)。我知道每个问题都很快,但可能会有几十万个品牌。

    3)只需将所有数据放入solr并使用facets?-但是如何识别每个方面并确定mysql表中显示的每个方面的相关信息呢?相关mysql表中的每个条目都有一个标题、描述、格式化的url、元数据,相关信息是否也应该存储在solr中?在另一个索引中?在这种情况下,我应该一起去掉mysql吗?

    任何关于最佳(实践)选择的想法都会非常感谢,或者任何我没有想到的建议都会很好。

    凯尔克

    1 回复  |  直到 12 年前
        1
  •  5
  •   NetConstructor.com MattW    12 年前

    solr是为搜索而构建的,它使用自己的查询语言和缓存机制为facet等优化。如果你能编写一些(基于mysql的)代码,在搜索查询/结果的性能方面能超过solr,我会非常惊讶。

    看看solr是如何索引她的数据的(或者实际上是为了让它正确地索引而需要什么样的数据)。这方面有很好的入门文档。也许你最终会得到60%的solr索引和40%的mysql——不管怎样,从我在你的计划中读到的,solr是非常值得探索的。

    基于网络的应用程序的常规方法:

  • 1)创建一个与您的数据匹配的索引方案,并搜索solr
  • 2)创建mysql数据到solr的导入(也有工具)
  • 3)创建将用户查询转换为solr查询的前端应用程序
  • 4)将这些查询发送给solr
  • 5)分析结果并调整查询以创建新的方面
  • 6)尽可能缓存

    HTH 马特