首页 文章

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

提问于
浏览
1

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

"Zelte"
"Tunnelzelte"
"Äxte"
"Sägen"
"Softshells"

现在,如果我们使用如下查询查询facer的facet:

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 回答

  • 1

    我会用ASCIIFoldingFilterFactory

    将不在前127个ASCII字符(“基本拉丁语”Unicode块)中的字母,数字和符号Unicode字符转换为ASCII等效字符(如果存在) .

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

    UPDATE
    该解决方案不适用于facet,因为它们使用索引值 . 使用 ASCIIFoldingFilterFactory 你可以有正确的排序,但你不知道任何其他解决方案 .

相关问题