【问题标题】:Solr Facet Multiple Words with Comma Separated Values具有逗号分隔值的 Solr Facet 多个单词
【发布时间】:2012-03-28 19:38:07
【问题描述】:

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

我已将波段字段设置为字符串并将多值设置为 true。

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

结果与预期的一样,字符串被刻面为一个长字符串。

"珍珠酱,爱丽丝,尖叫的树木,Everclear",1, “Primus,Gaga,培根片”,1, “公鸡,翅膀,鼓槌,尾羽”,1,

这种方法的最大问题是当字段类型是字符串时,它似乎不可搜索。似乎我需要创建一个重复字段,该字段类型为 text_general 用于搜索,并有一个用于分面。是吗?

有没有办法为带字段声明一个分隔符以正确处理这个问题,或者我的方法是错误的?

【问题讨论】:

    标签: mysql solr dataimporthandler


    【解决方案1】:

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

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

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

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

    如果您使用与group_concat 相同的分隔符配置splitBy,那么技巧就完成了,您将拥有多个值,并且您的构面看起来不错。

    【讨论】:

    • 工作就像一个魅力!因此,对于我想要分面和搜索的任何字段,我需要做的就是为分面创建一个未标记的字段并为搜索进行标记。
    • +1 我认为您需要编写一个应用程序来将字符串拆分为多个值。
    • 你能显示在哪里放置 splitBy 吗?这会改变存储在字段中的值,还是可以根据另一个字段的逗号分隔值填充新字段?
    • 我想通了:&lt;field column="newfieldname" sourceColName="originalfield" splitBy="," /&gt;。当然newfieldname 必须在schema.xml 中声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多