我将数据从mysql中提取到solr中。其中一个字段是使用group_concat函数生成的,该函数生成一个逗号分隔的字段,该字段列出了事件的所有频段。当时我认为这是为一个活动存储多个乐队的最佳方式。但是,我发现我无法对所有事件进行此查询。
我已将band字段设置为字符串,并将多值设置为true。
<field name="bands" type="string" indexed="true" stored="true" multiValued="true"/>
结果符合预期,其中字符串被刻面为一个长字符串。
“Pearl Jam,Alice,Screaming Trees,Everclear”,1, “Primus,Gaga,Bacon Bits”,1, “雄鸡,翅膀,鼓槌,尾羽”,1,
这种方法的最大问题是当字段类型为字符串时,它似乎无法搜索。好像我需要创建一个类型为text_general的重复字段进行搜索,并有一个用于分面。是
有没有办法为band字段声明一个分隔符来正确地解决这个问题,或者我的方法是错误的?
答案 0 :(得分:9)
对您的字段进行标记不会解决您的方面问题,您将能够使用单个频段名称进行搜索并获得结果,但方面会更糟。基本规则是不对用于制作构面的字段使用任何标记化或文本增强。
使用multiValued字段很好,但实际上是将一个带有一个band列表的单个值放入其中,因为您的查询将该列表作为单个列返回,该列映射到Solr中相关字段的单个值。
您可以保留group_concat
输出并通过对data-config.xml
的简单更改来解决您的问题,告诉Solr使用分隔符拆分这些波段名称。请查看RegexTransformer
及其splitBy
参数:
splitBy :用于拆分String以获取多个值,返回一个 值列表
如果您将splitBy
配置为group_concat
用于{{1}}的相同分隔符,则会有多个值,您的方面看起来会很好。