如何使用子查询加速solr DIH

时间:2015-03-13 13:41:12

标签: mysql solr dih

我想加速DIH以获得具有以下结构的solr配置:

  • 用户实体(映射到用户表)
  • 用户实体具有映射到用户实体字段的1..n值。所以n个附加字段
  • 通过值表上的子查询收集每个字段。

示例:

entity:user (select * from user)

用户具有以下字段:

value_1: (select * from value where uid=user.id and category=1)
value_2: (select * from value where uid=user.id and category=2)
value_3: (select * from value where uid=user.id and category=3)

由于存在许多子查询,导入时间过长。

使用SOLR和DIH(MySQL)的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我已经处理过这个完全相同的问题,但问题是MySQL和Solr的SQL DIH都没有使用字段来帮助 name <的内置容量/ em> MySQL结果列或Solr字段。

理想情况下,您可以执行以下操作:这不起作用!

<entity name="value" query="select myfield, category from t1 where uid=${user.id}">
    <field column="myfield" name="value_${value.category}">
</entity>

如果没有这种精彩的,不存在的功能,有几种方法可以获得类似的功能而不太方便。

This page显示了对创建此功能的两种不同方法的深入分析,使用ScriptTransformer(他发现它很容易实现,但却严重降低了导入速度),或{{3 (这需要你编译一个非常简短的Java片段,但显然很多更有效。

同样,TemplateTransformer可能是您想要的解决方案。

在我自己的情况下,我没有找到这个解决方案,而是写了一个简短的Java程序来发出SQL请求,构建SolrInputDocument然后分批提交给Solr。然后,当我们决定将所有值作为单个JSON编码字段放入Solr时,整个事情变得无关紧要。

祝你好运!