我正在将数据从 mysql 提取到 solr 中。其中一个字段是使用 group_concat 函数生成的,该函数会生成一个以逗号分隔的字段,其中列出了事件的所有频段。当时我相信这是为一项活动存储多个乐队的最佳方式。但是,我发现我无法针对所有事件来处理此查询。
我已将 band 字段设置为字符串,并将多值设置为 true。
<field name="bands" type="string" indexed="true" stored="true" multiValued="true"/>
结果与预期一致,其中字符串被分面为一个长字符串。
“珍珠果酱、爱丽丝、尖叫树、Everclear”,1,
“Primus,Gaga,培根块”,1,
"公鸡、翅膀、鸡腿、尾羽",1,
这种方法的最大问题是当字段类型为字符串时,它似乎不可搜索。似乎我需要创建一个重复的字段,其类型为 text_general 用于搜索,并有一个用于分面。是的?
有没有办法为 band 字段声明一个分隔符来正确地处理这个问题,或者我的方法是错误的?
标记您的字段并不能解决您的方面问题,您将能够使用单个乐队名称进行搜索并获得结果,但方面会更糟。基本规则是不要对用于制作构面的字段使用任何标记化或文本增强。
最好使用多值字段,但实际上将带有带列表的单个值放入其中,因为您的查询将该列表作为单个列返回,该列映射到 Solr 中相关字段的单个值。
您可以保留group_concat
输出并通过简单的更改来解决您的问题data-config.xml
,告诉 Solr 使用分隔符分割这些带名称。看看RegexTransformer和它的splitBy
范围:
splitBy:用于分割一个String得到多个值,返回一个
值列表
如果您配置splitBy
使用与您使用的相同的分隔符group_concat
技巧完成了,您将拥有多个值,并且您的方面看起来会很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)