2

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

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

现在,如果我们使用如下查询查询 solr 的构面:

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 正确排序这些值而不标准化变音符号(因为我们向用户显示这些值)?

4

1 回答 1

2

我会使用ASCIIFoldingFilterFactory

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

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

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

于 2012-06-28T13:00:44.617 回答