Solr 使用非ASCII值按索引对面进行排序
我们有一个字段“facet_tag”,其中包含描述产品的标签。由于标记是德语的,它们可能包含非ASCII字符(如UMLAUT)。以下是一些可能的值: “泽尔特”Solr 使用非ASCII值按索引对面进行排序,solr,faceted-search,Solr,Faceted Search,我们有一个字段“facet_tag”,其中包含描述产品的标签。由于标记是德语的,它们可能包含非ASCII字符(如UMLAUT)。以下是一些可能的值: “泽尔特” “Tunnelzelte” “Äxte” “Sägen” “软壳” 现在,如果我们使用如下查询查询solr中的facet: http://<solr_host>:<solr_port>/solr/select?q=*&facet=on&facet.field=facet_tag&facet
“Tunnelzelte”
“Äxte”
“Sägen”
“软壳”
现在,如果我们使用如下查询查询solr中的facet:
http://<solr_host>:<solr_port>/solr/select?q=*&facet=on&facet.field=facet_tag&facet.sort=index
http://:/solr/select?q=*&facet=on&facet.field=facet\u标记&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>
1.
1.
1.
1.
2.
标签“Äxte”应该是第一项,然后是“Sägen”。显然,在这种情况下,Solr不能很好地处理非ASCII字符(这也在分面搜索文档中有所说明,请参阅)
有没有办法让Solr在不规范UMLAUT的情况下对这些值进行正确排序(因为我们向用户显示了这些值) 我会使用:
将不在前127个ASCII字符(“基本拉丁”Unicode块)中的字母、数字和符号Unicode字符转换为其ASCII等效字符(如果存在)
通过这种方式,您索引的内容将被规范化(例如,Äxte将被索引为Axte),但存储的内容不会改变。这就是为什么您应该获得预期的排序,但是您将显示的内容仍然是原始内容(例如,Äxte)
更新该解决方案不适用于面,因为它们使用索引值。使用
ASCIIFoldingFilterFactory
可以获得正确的排序,但也可以看到规范化字符作为输出。基本上,您可以有正确的排序但输出错误,也可以有错误的排序但输出正确。不幸的是,我不知道其他解决方案。谢谢你指出这一点,我现在实际上接受了更多的答案:)谢谢你在这里帮助我!我认为问题在于分面搜索总是使用索引值而不是存储的值(请参阅)。因此,当我将过滤器添加到索引分析器时,排序工作与预期一样,但输出也从“Äxte”更改为“Axte”。我明白了!我应该更深入地阅读这个问题,当然,您会将索引结果视为切面输出。需要考虑一下,这比我最初认为的更具挑战性……似乎真的没有一种方法可以在不改变输出的情况下做到这一点。我们将在应用程序端对方面进行排序。