Solr:在数据导入期间转换逗号分隔的字段

Pau*_*aul 4 solr

我正在使用Solr 3.5.0.我从JDBC数据源导入并有一个分隔字段,我想分成单个值.我正在使用RegexTransformer但是我的领域没有分裂.

样本价值

Bob,Carol,Ted,Alice
Run Code Online (Sandbox Code Playgroud)

数据-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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

当我搜索:我得到一个doc像这样的结果元素:

<doc>
  <int name="id">22</int>
  <arr name="names">
    <str>Bob,Carol,Ted,Alice</str>
  </arr>
</doc>
Run Code Online (Sandbox Code Playgroud)

我本来希望得到这个:

<doc>
  <int name="id">22</int>
  <arr name="names">
    <str>Bob</str>
    <str>Carol</str>
    <str>Ted</str>
    <str>Alice</str>
  </arr>
</doc>
Run Code Online (Sandbox Code Playgroud)

我很可能误解RegexTransformer了维基的部分.我已经尝试更改我的分隔符,我尝试使用不同的字段表示部件(如wiki中所示)...

<field column="name" splitBy="," sourceColName="names" />
Run Code Online (Sandbox Code Playgroud)

......但这导致了空name场.我究竟做错了什么?

dhy*_*ong 14

我通过在模式文件中创建字段类型来处理类似的问题:

<fieldType name="commaDelimited" class="solr.TextField">
      <analyzer>
        <tokenizer class="solr.PatternTokenizerFactory" pattern=",\s*" />
      </analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)

然后我将该类型应用于数据字段的字段,如:

<field name="features" type="commaDelimited" indexed="true" stored="true"/>
Run Code Online (Sandbox Code Playgroud)