1

设想:

在数据库中,我有一个名为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 中将该字段指定为多值

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

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

任何帮助表示赞赏,谢谢。

4

2 回答 2

1

而不是在data-config.xml. 你可以在你的schema.xml. 这是你可以做的,

  1. 创建一个带有标记器的fieldTypePatternTokenizerFactory ,它使用正则表达式基于|.
  2. FieldSplit : 使用 this 创建一个multivalued字段new fieldType,最终会有 1,8,90,130
  3. FieldOriginal:创建字符串字段(如果您不需要分析),保留原始值 1|8|90|130|
  4. 现在您可以根据需要使用 copyField 复制 FieldSplit 、 FieldOriginal 值。

检查这个问题,它是相似的。

于 2012-01-25T15:28:03.543 回答
1

您可以从相同的数据创建两列并分别处理它们。

SELECT categories, categories as categories_pipe FROM category_table

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

于 2012-04-03T00:35:06.197 回答