Solr dataimport нескольких столбцов JDBC в одном поле - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь реализовать 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>

Как вы можете видеть, есть 4 столбца из БД (ort, ortz, ot1, ot2), идущие в одно поле (ort).В большинстве случаев заполнен только один из столбцов, и в этом случае документ индексируется нормально.Но при наличии нескольких записей индексация документа завершается неудачно.Поле определяется следующим образом:

<field name="ort" type="text_de" uninvertible="true" indexed="true" required="true" stored="true"/>

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

вы делаете это следующим образом:

  1. вы объединяете все значения в одно значение в Select:

    select ..., ort || ','|| ortz || ',' || or1 || ',' || ort2 AS ort_all FROM variablen2018.ags22_tmp_solr

  2. , а затем разбить его на отдельные значения при индексации в solr (этовыполняется с помощью RegexTransformer / splitBy)

    <имя объекта = "address" transformer = "RegexTransformer" <br>...

Примечание: вставлен пробел после <или текст здесь не отображается ... </p>

Для просмотра:

  • handleвозможные значения null, проверьте concat_ws и т. д.
  • Обработка возможных значений внутри значений ort (используйте другой разделитель или замените и т. д.)
0 голосов
/ 20 февраля 2019

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" />

Надеюсь, это поможет!

...