首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用子查询加速solr DIH

如何使用子查询加速solr DIH
EN

Stack Overflow用户
提问于 2015-03-13 13:41:11
回答 2查看 438关注 0票数 1

我想加快solr配置的DIH,其结构如下:

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

示例:

实体:用户(select * from user)

用户有以下字段:

代码语言:javascript
复制
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)的最佳方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2015-03-13 21:04:50

我已经处理过这个完全相同的问题,问题是MySQL和Solr的SQL都没有内置的能力来使用字段值来帮助命名MySQL结果列或Solr字段。

理想情况下,您可以这样做:--这是不工作的!

代码语言:javascript
复制
<entity name="value" query="select myfield, category from t1 where uid=${user.id}">
    <field column="myfield" name="value_${value.category}">
</entity>

没有这个奇妙的、不存在的特性,有几种方法可以在不太方便的情况下获得类似的功能。

此页展示了对创建此功能的两种不同方法的很好的分析,要么使用ScriptTransformer (他发现实现起来很简单,但却严重地减缓了导入),要么使用TemplateTransformer (它需要编译一个非常短的Java片段,但显然效率要高得多)。

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

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

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29033763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档