Solr - 匹配逗号分隔的ID

时间:2015-08-28 03:52:32

标签: mysql solr lucene

在mysql中,我有一个列impl Option<Option<T>> { fn flatten(&self) -> Option<T> { match self { None => None, Some(v) => v, } } } fn main() { let x = Some(Some(1)); let y = x.flatten(); println!("{:?}", y); } ,它的逗号分隔了int值。 例如ids varchar(255)

通过1,3,5,7进行搜索时,用户将提供一个Solr,例如id,然后它应该能够找到3列包含值{{1}的行}}

问题是:

如何通过DIH导入数据,并在solr中定义字段? THX。

2 个答案:

答案 0 :(得分:2)

如您所指定,您的数据是以逗号分隔的数字序列。您可以使用以下FieldType配置。

<fieldType name="comma_numbers" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" />
  </analyzer>
</fieldType>

如果您的数据包含其他数字,那么您可能需要调整配置中的WordDelimiterFilterFactory过滤器。

Analysis of the data and fieldType

答案 1 :(得分:2)

在您的data-import.xml中(如果您这样命名),您可以使用UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)

<entity name="foo" transformer="RegexTransformer" query="select list_of_ids from foo"/>
   <field column="splittedIDs" splitBy="," sourceColName="list_of_ids"/>
</entity>

如您所见,您需要

  • 为实体添加transformer="RegexTransformer"
  • 为相关字段添加splitBy=","

在schema.xml中,相关字段必须为multivalued="true"。人们往往会忘记这一点并询问为什么存储第一个/最后一个值。