Solr data将多个列导入jdbc到一个字段中

问题描述 投票:0回答:2

我正在尝试实现solr搜索项目。到目前为止一切都很好,第一个简单的版本工作。现在我尝试从postgres数据库导入,其中多列应该在同一个字段中结束。我的配置:

<entity name="address" query="SELECT objectid, ags2, ags3, ags5, ags8, ags11, ags20, ags22, pt, stn, hnr_min, hnr_max, plz, ort, ortz, ot1, ot2 FROM variablen2018.ags22_tmp_solr LIMIT 10000;">
  <field column="objectid" name="id" />
  <field column="plz" name="plz" />
  <field column="ort" name="ort" />
  <field column="ortz" name="ort" />
  <field column="ot1" name="ort" />
  <field column="ot2" name="ort" />
  <field column="ort" name="ort_res" />
  <field column="stn" name="stn" />
  <field column="stn" name="stn_res" />
  <field column="ags2" name="ags2" />
  <field column="ags3" name="ags3" />
  <field column="ags5" name="ags5" />
  <field column="ags8" name="ags8" />
  <field column="ags11" name="ags11" />
  <field column="ags20" name="ags20" />
  <field column="ags22" name="ags22" />
  <field column="pt" name="coord" />
  <field column="hnr_min" name="hnr_min" />
  <field column="hnr_max" name="hnr_max" />
</entity>

如您所见,DB(ort,ortz,ot1,ot2)中有4列进入一个字段(ort)。大多数情况下,根本只填充其中一列,在这种情况下,文档会正常编制索引。但是当实际存在多个条目时,文档的索引失败。该字段以这种方式定义:

<field name="ort" type="text_de" uninvertible="true" indexed="true" required="true" stored="true"/>
jdbc solr data-import
2个回答
1
投票

DataImporthandler将查询的结果视图映射到模式视图,因此我认为您不能将多个列映射到一个字段。相反,您可以将每个列分配给新的Solr字段,然后在架构中复制它们。

例如

<field name="ort" type="string" />
<field name="ortz" type="string" />
<field name="ot1" type="string" />
<field name="ot2" type="string" />
<field name="ortCombined" type="string" multiValued="true"/>

<copyField source="ort" dest="ortCombined" />
<copyField source="ortz" dest="ortCombined" />
<copyField source="ot1" dest="ortCombined" />
<copyField source="ot2" dest="ortCombined" />

希望这可以帮助 !


0
投票

你这样做:

  1. 您将所有值连接到Select中的单个值: select ...,ort ||','|| ortz ||','|| or1 ||','|| ort2 AS ort_all FROM variablen2018.ags22_tmp_solr
  2. 索引到solr时将其拆分为单独的值(这是通过RegexTransformer / splitBy完成的) <entity name =“address”transformer =“RegexTransformer” ... <field column =“ort_all”name =“ort”splitBy =“,”/>

注意:在<或文本未显示在此处后插入空格...

要小心:

  • 处理可能的null,检查concat_ws等
  • 处理可能的内部ort值(使用另一个分隔符或替换等)
© www.soinside.com 2019 - 2024. All rights reserved.