使用非ASCII值按索引对Facets进行排序

时间:2012-06-28 12:51:14

标签: solr faceted-search

我们有一个字段'facet_tag',其中包含描述产品的标签。由于标签是德语,因此它们可能包含非ASCII字符(如变音符号)。以下是一些可能的值:

“Zelte”
“Tunnelzelte”
“Äxte”
“Sägen”
“Softshells”

现在,如果我们使用类似的查询来查询facer:

http://<solr_host>:<solr_port>/solr/select?q=*&facet=on&facet.field=facet_tag&facet.sort=index

排序结果如下:

<lst name="facet_counts">
    <lst name="facet_queries"/>
    <lst name="facet_fields">
        <lst name="facet_tag">
            <int name="Softshells">1</int>
            <int name="Sägen">1</int>
            <int name="Tunnelzelte">1</int>
            <int name="Zelte">1</int>
            <int name="Äxte">2</int>
        </lst>
    </lst>
    <lst name="facet_dates"/>
    <lst name="facet_ranges"/>
</lst>

标签“Äxte”应该是第一个项目,然后是“Sägen”。显然,在这种情况下,Solr不能很好地处理非ASCII字符(在分面搜索的文档中也有说明,请参阅http://wiki.apache.org/solr/SimpleFacetParameters#facet.sort

有没有办法让Solr正确排序这些值而不规范变音符号(因为我们向用户显示值)?

1 个答案:

答案 0 :(得分:2)

我会使用ASCIIFoldingFilterFactory

  

将不在前127个ASCII字符(“Basic Latin”Unicode块)中的字母,数字和符号Unicode字符转换为ASCII等效字符(如果存在)。

这样,您索引的内容会被标准化(例如Äxte会被索引为Axte),但存储的内容不会更改。这就是为什么你应该得到预期的排序,但你将展示的内容仍然是原始的(例如Äxte)。

<强>更新
该解决方案不适用于facet,因为它们使用索引值。使用ASCIIFoldingFilterFactory您可以进行正确的排序,但您也会看到规范化的字符作为输出。基本上你可以有正确的排序,但错误的输出或错误的排序,但正确的输出。不幸的是,我不知道任何其他解决方案。