2012-03-28 123 views
2

我正在将数据从mysql拖入solr。其中一个字段是使用group_concat函数生成的,该函数生成逗号分隔字段,其中列出了事件的所有波段。当时我相信这是为一个事件存储多个乐队的最佳方式。但是,我发现我无法面对所有事件的查询。Solr方面用逗号分隔值的多个单词

我已经设置了band字段的字符串和多值为true。

<field name="bands" type="string" indexed="true" stored="true" multiValued="true"/> 

结果是如预期,其中字符串被刻面作为一个长的字符串。

“珍珠果酱,爱丽丝,尖叫树,的EverClear”,1, “博智,加加,培根位”,1, “雄鸡,鸡翅,鸡腿,尾羽”,1,

最大这种方法的问题是当字段类型是字符串时,它看起来不可搜索。似乎我需要创建一个重复的字段,类型text_general搜索和有一个面。是?

有没有办法为band字段声明一个分隔符来恰当地处理这个问题,或者我的方法是错误的?

回答

8

令牌化您的领域不会解决您的方面问题,您将能够使用单个乐队名称进行搜索并获得结果,但方面会更糟糕。基本规则是不使用任何标记或文本增强用于制作刻面的字段。

使用multiValued字段是很好的做法,但实际上只是将一个带有列表的值放入它中,因为您的查询将该列表作为单列映射到Solr中相关字段的单个值。

您可以保留group_concat输出并通过简单更改data-config.xml来解决您的问题,告诉Solr使用分隔符分割这些带名称。看一看在RegexTransformer及其splitBy参数:

splitBy:用于将一个字符串分解以获得多个值,如果你与配置splitBy返回值

的 列表相同的分隔符你用于group_concat的技巧已经完成,你将有多个值,你的方面看起来不错。

+0

工作就像一个魅力!所以这听起来是我需要做的任何领域,我想要facet以及搜索是做一个未知的领域的方面和标记为搜索。 – bikedorkseattle 2012-03-28 21:52:09

+0

+1我以为你需要编写一个应用程序来将字符串分成多个值。 – aitchnyu 2012-03-29 05:09:35

+1

我可以看到更新的模式吗?我有确切的问题 – 2013-09-06 13:02:10