【问题标题】:Solr copyField mixed with RegexTransformerSolr copyField 与 RegexTransformer 混合
【发布时间】:2012-04-03 08:35:06
【问题描述】:

场景:

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

我想要什么:

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

  • 字段 Categories_ pipe 将包含数据库中的确切字符串,即1|8|90|130|
  • 字段 Categories 这将是一个包含值 1、8、90 和 130 的 INT 类型的多值字段

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: solr field multivalue


    【解决方案1】:

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

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

    检查这个Question,它是相似的。

    【讨论】:

    • 感谢您的回答,但是我对第 3 点有疑问。虽然它是一个多值字段,但“存储”值仍然只是 1|8|90|130 的一个值。标记器对存储的值不做任何事情,它会更改该值的索引的内部结构。事实上,这也是你提到的问题所说的。
    • 我可能是错的,但我认为 PatternTokenizerFactory 不适用于复制字段中的 存储值,至少这是我似乎遇到的问题。正则表达式效果显示在构面中,但不在 FieldSplit 的存储值中。
    【解决方案2】:

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

    SELECT categories, categories as categories_pipe FROM category_table

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2018-04-05
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      相关资源
      最近更新 更多