【问题标题】:Sort Facets by Index with non-ASCII values使用非 ASCII 值按索引对构面进行排序
【发布时间】:2012-06-28 12:51:14
【问题描述】:

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

“Zelte”
“隧道”
“阿克斯特”
“萨根”
“软壳”

现在,如果我们使用如下查询查询 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 正确地对这些值进行排序而无需标准化变音符号(因为我们向用户显示了这些值)?

【问题讨论】:

  • 感谢您指出这一点,我现在实际上接受了更多答案:)

标签: solr faceted-search


【解决方案1】:

我会使用ASCIIFoldingFilterFactory:

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

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

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

【讨论】:

  • 感谢您在这里帮助我!我认为问题在于分面搜索总是使用索引值而不是存储的值(参见wiki.apache.org/solr/SolrFacetingOverview)。因此,当我将过滤器添加到索引分析器时,排序按预期工作,但输出也会从“Äxte”变为“Axte”。
  • 我明白了!我应该更深入地阅读这个问题,当然您会将索引结果视为多面输出。需要考虑一下,这比我最初认为的更具挑战性......
  • 似乎真的没有办法在不改变输出的情况下做到这一点。我们将改为在应用程序端对构面进行排序。
猜你喜欢
  • 1970-01-01
  • 2022-08-19
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多