Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr copyField与RegexTransformer混合_Solr_Field_Multivalue - Fatal编程技术网

Solr copyField与RegexTransformer混合

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.

场景:

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

我想要什么:

在Solr索引中,我希望有两个字段:

  • 字段类别uu管道,包含DB中的精确字符串,即
    1 | 8 | 90 | 130 |
  • 字段类别,它是INT类型的多值字段,包含值1、8、90和130
对于后者,在实体规范中,我可以使用regexTransformer,然后在data-config.xml中指定以下字段:
,然后在schema.xml中将字段指定为多值

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

作为一种解决方法,我还可以从实体查询发送两次相同的字段,但实际上,字段类别是一个计算字段(选择嵌套),这有点昂贵,因此我希望避免使用它


非常感谢您的帮助。

而不是在
data config.xml
上拆分它。您可以在
schema.xml
中这样做。这是你能做的

  • 使用标记器
    PatternTokenizerFactory
    创建一个字段类型,它使用正则表达式根据
    进行拆分
  • 字段拆分:使用此
    新字段类型创建一个
    多值
    字段,最终将有1,8,90130
  • FieldOriginal:创建保留原始值1 | 8 | 90 | 130的字符串字段(如果不需要对其进行分析)|
  • 现在,您可以使用copyField根据需要复制FieldSplit、FieldOriginal值

  • 选中此项,它是类似的。

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

    从类别表中选择类别、类别作为类别\u管道


    然后您可以拆分“类别”列,但另一列的索引保持不变。

    谢谢您的回答,但是我对第3点有一个问题。尽管它是一个多值字段,“存储”值仍然只是
    1 | 8 | 90 | 130
    的一个值。标记器对存储的值不做任何操作,它更改该值的索引的内部结构。事实上,你提到的问题也说明了这一点。我可能错了,但我不认为PatternTokenizerFactory适用于copyfield中的存储值,至少这是我似乎遇到的问题。正则表达式效果显示在facet中,但不显示在FieldSplit的存储值中。