Solr Facet具有逗号分隔值的多个单词

bik*_*tle 2 mysql solr dataimporthandler

我将数据从mysql中提取到solr中.其中一个字段是使用group_concat函数生成的,该函数生成一个逗号分隔的字段,该字段列出了事件的所有频段.当时我认为这是为一个活动存储多个乐队的最佳方式.但是,我发现我无法对所有事件进行此查询.

我已将band字段设置为string并将multivalued设置为true.

<field name="bands" type="string" indexed="true" stored="true" multiValued="true"/>
Run Code Online (Sandbox Code Playgroud)

结果如预期的那样,字符串被刻面为一个长字符串.

"Pearl Jam,Alice,Screaming Trees,Everclear",1,"Primus,Gaga,Bacon Bits",1,"Roosters,Wings,Drumsticks,Tail Feathers",1,

这种方法的最大问题是当字段类型为字符串时,它似乎无法搜索.好像我需要创建一个类型为text_general的重复字段进行搜索,并有一个用于分面.是?

有没有办法为band字段声明一个分隔符来正确地解决这个问题,或者我的方法是错误的?

jav*_*nna 9

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

使用multiValued字段是好的,但实际上是将带有一个band列表的单个值放入其中,因为您的查询将该列表作为单个列返回,该列映射到Solr中相关字段的单个值.

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

splitBy:用于拆分String以获取多个值,返回值列表

如果您splitBy使用相同的分隔符来配置这个group_concat技巧,那么您将拥有多个值,并且您的方面看起来很好.

  • 我想通了:`&lt;field column="newfieldname" sourceColName="originalfield" splitBy="," /&gt;`。当然,`newfieldname` 必须在`schema.xml` 中声明。 (2认同)