Solr copyField与RegexTransformer混合使用

时间:2012-01-25 14:23:24

标签: solr field multivalue

情境:

在数据库中,我有一个名为 Categories 的字段,其字符串类型包含多个管道分隔的数字,例如1|8|90|130|

我想要的是什么:

在Solr索引中,我想要有两个字段:

  • 字段类别 _ 管道,其中包含数据库中的确切字符串,即1|8|90|130|
  • 字段类别,它是INT类型的多值字段,包含值1,8,90和130

对于后者,在实体规范中我可以使用regexTransformer然后在data-config.xml中指定以下字段: <field column="Categories" name="Navigation" splitBy="\|"/>然后在schema.xml中将字段指定为多值

我不知道的是我如何“复制”相同的字段两次并仅在一个字段上执行正则表达式拆分。我知道有一个copyField工具可以在schema.xml中定义但是我找不到一种方法来转换复制的字段,因为从我所知道的(我可能在这里错了),变换器只能在实体规范。

作为一种解决方法,我也可以从实体查询中发送两次相同的字段,但实际上,字段 Categories 是一个计算字段(选择嵌套),这有点贵,所以我想避免它

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

而不是将其拆分为data-config.xml。您可以在schema.xml中执行此操作。这是你能做的,

  1. 使用令牌工具PatternTokenizerFactory创建 fieldType ,使用正则表达式基于|进行拆分。
  2. FieldSplit :使用此multivalued创建new fieldType字段,最终将有1,8,90,130
  3. FieldOriginal :创建字符串字段(如果您不需要分析),保留原始值1 | 8 | 90 | 130 |
  4. 现在,您可以根据需要使用copyField复制FieldSplit,FieldOriginal值。
  5. 检查此Question,它是类似的。

答案 1 :(得分:1)

您可以从同一数据创建两列并单独处理它们。

选择类别,类别为categories_pipe FROM category_table

然后你可以拆分“类别”列,但按原样索引另一个。