Solr copyField与RegexTransformer混合
场景: 在数据库中,我有一个名为Categories的字段,该字段的类型为string,包含许多以管道分隔的数字,如Solr copyField与RegexTransformer混合,solr,field,multivalue,Solr,Field,Multivalue,场景: 在数据库中,我有一个名为Categories的字段,该字段的类型为string,包含许多以管道分隔的数字,如1 | 8 | 90 | 130 | 我想要什么: 在Solr索引中,我希望有两个字段: 字段类别uu管道,包含DB中的精确字符串,即1 | 8 | 90 | 130 | 字段类别,它是INT类型的多值字段,包含值1、8、90和130 对于后者,在实体规范中,我可以使用regexTransformer,然后在data-config.xml中指定以下字段: ,然后在schema.
1 | 8 | 90 | 130 |
我想要什么:
在Solr索引中,我希望有两个字段:
- 字段类别uu管道,包含DB中的精确字符串,即
1 | 8 | 90 | 130 |
- 字段类别,它是INT类型的多值字段,包含值1、8、90和130
,然后在schema.xml中将字段指定为多值
我不知道的是,我如何才能“复制”同一字段两次,并仅在一个字段上执行正则表达式拆分。我知道可以在schema.xml中定义copyField
功能,但是我找不到转换复制字段的方法,因为据我所知(这里我可能错了),转换器仅在实体规范中可用
作为一种解决方法,我还可以从实体查询发送两次相同的字段,但实际上,字段类别是一个计算字段(选择嵌套),这有点昂贵,因此我希望避免使用它
非常感谢您的帮助。而不是在
data config.xml
上拆分它。您可以在schema.xml
中这样做。这是你能做的
PatternTokenizerFactory
创建一个字段类型,它使用正则表达式根据
进行拆分李>
新字段类型创建一个多值
字段,最终将有1,8,90130
选中此项,它是类似的。您可以从相同的数据创建两列并分别处理它们 从类别表中选择类别、类别作为类别\u管道
然后您可以拆分“类别”列,但另一列的索引保持不变。谢谢您的回答,但是我对第3点有一个问题。尽管它是一个多值字段,“存储”值仍然只是
1 | 8 | 90 | 130
的一个值。标记器对存储的值不做任何操作,它更改该值的索引的内部结构。事实上,你提到的问题也说明了这一点。我可能错了,但我不认为PatternTokenizerFactory适用于copyfield中的存储值,至少这是我似乎遇到的问题。正则表达式效果显示在facet中,但不显示在FieldSplit的存储值中。