场景:
在数据库中,我有一个名为Categories的字段,该字段类型为字符串,包含多个管道分隔的数字,如1|8|90|130|
我想要什么:
在Solr索引中,我希望有2个字段:
- 字段类别_管道,它将包含与数据库中相同的字符串,即
1|8|90|130|
- 字段类别,它将是INT类型的多值字段,包含值1、8、90和130
对于后者,在实体规范中,我可以使用regexTransformer,然后在data-config.xml中指定以下字段:<field column="Categories" name="Navigation" splitBy="|"/>
,然后在schema.xml 中将字段指定为多值
我不知道的是,如何"复制"同一个字段两次,只对其中一个执行regex拆分。我知道可以在schema.xml中定义copyField
功能,但我找不到转换复制字段的方法,因为据我所知(我可能错了),transformer仅在实体规范中可用。
作为一种变通方法,我也可以从实体查询中发送两次相同的字段,但实际上,字段Categories是一个计算字段(选择嵌套),这有点昂贵,所以我想避免它
感谢您的帮助。
而不是在data-config.xml
进行拆分。你可以在schema.xml
中做到这一点。,这是你可以做的
- 使用标记化器
PatternTokenizerFactory
创建fieldType,该标记化器使用正则表达式基于|
进行拆分 -
FieldSplit:使用此
new fieldType
创建一个multivalued
字段,最终将具有1,8,90130 - FieldOriginal:创建字符串字段(如果不需要对此进行分析),它将保留原始值1|8|90|130|
- 现在,您可以根据需要使用copyField复制FieldSplit、FieldOriginal值
检查这个问题,它是相似的。
您可以从相同的数据创建两列并分别处理它们。
选择类别,类别作为类别_管道FROM类别_表格
然后,您可以拆分"类别"列,但按原样对另一列进行索引。