Solr: преобразование поля через запятую при импорте данных - PullRequest
4 голосов
/ 25 февраля 2012

Я работаю с Solr 3.5.0.Я импортирую данные из источника данных JDBC, и у меня есть поле с разделителями, которое я хотел бы разделить на отдельные значения.Я использую RegexTransformer, но мое поле не разделяется.

пример значения

Bob,Carol,Ted,Alice

data-config.xml

<dataConfig>
  <dataSource driver="..." />
  <document>
    <entity name="ent"
            query="SELECT id,names FROM blah"
            transformer="RegexTransformer">
      <field column="id" />
      <field column="names" splitBy="," />
    </entity>
  </document>
</dataConfig>

schema.xml

<schema name="mytest" version="1.0">
  <types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true"
               omitNorms="true"/>
    <fieldType name="integer" class="solr.IntField" omitNorms="true"/>
  </types>
  <fields>
    <field name="id" type="integer" indexed="false" stored="true"
           multiValued="false" required="true" />
    <field name="name" type="string" indexed="true" stored="true"
           multiValued="true" required="true" />
  </fields>
</schema>

Когда я ищу : Я получаю результат doc элемент, подобный этому:

<doc>
  <int name="id">22</int>
  <arr name="names">
    <str>Bob,Carol,Ted,Alice</str>
  </arr>
</doc>

Я надеялся получить это вместо этого:

<doc>
  <int name="id">22</int>
  <arr name="names">
    <str>Bob</str>
    <str>Carol</str>
    <str>Ted</str>
    <str>Alice</str>
  </arr>
</doc>

Вполне возможно, я неправильно понял RegexTransformer раздел вики.Я попытался изменить свой разделитель, и я попытался использовать другое поле для частей (как показано в вики) ...

<field column="name" splitBy="," sourceColName="names" />

... но это привело к пустому nameполе.Что я делаю не так?

Ответы [ 4 ]

14 голосов
/ 27 февраля 2012

Я решил подобную проблему, создав тип поля в файле схемы:

<fieldType name="commaDelimited" class="solr.TextField">
      <analyzer>
        <tokenizer class="solr.PatternTokenizerFactory" pattern=",\s*" />
      </analyzer>
</fieldType>

Затем я применил этот тип к полю к полю данных, например:

<field name="features" type="commaDelimited" indexed="true" stored="true"/>
2 голосов
/ 25 февраля 2012

Ваш столбец базы данных называется names, а поле Solr называется name (обратите внимание на отсутствующее s). Одним из решений является использование следующего в вашей конфигурации DIH, а затем переиндексация.

<field name="name" column="names" splitBy=","/>
1 голос
/ 29 января 2015

Вы можете использовать transformer = "RegexTransformer", а также вы можете использовать javascript для разделения значения.

<script><![CDATA[

function stringtoarray(row) {
 var value=row.get('names');

 if(value !="" && value !=null) {   
   name_arr=value.split(",");
   row.put('name',name_arr);
   return row;
 }
}
]]>
</script>

и добавьте transformer="script:stringtoarray" в поле сущности

1 голос
/ 23 октября 2012

Попробуйте поставить transformer = "RegexTransformer" перед оператором запроса, также у вас есть ошибка

   transformer="RegexTransformer">

, вам необходимо удалить '>'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...