Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr 使用非ASCII值按索引对面进行排序_Solr_Faceted Search - Fatal编程技术网

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

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

我们有一个字段“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.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”。我明白了!我应该更深入地阅读这个问题,当然,您会将索引结果视为切面输出。需要考虑一下,这比我最初认为的更具挑战性……似乎真的没有一种方法可以在不改变输出的情况下做到这一点。我们将在应用程序端对方面进行排序。