【问题标题】:Solr sorting with special characters带有特殊字符的 Solr 排序
【发布时间】:2014-08-27 14:07:27
【问题描述】:

我希望能够按字母顺序对具有母语字符的字段进行排序,例如“Ö”、“Ş”或“Ç”(土耳其语字符)。

我的 solr 架构的相关部分如下:

<field name="bookTitle" type="text_tr" indexed="true" stored="true"/>
<field name="bookTitleSort" type="string" indexed="true" stored="false"/>
<copyField source="bookTitle" dest="bookTitleSort"/>

首先,我尝试使用bookTitle asc 进行排序,但结果根本不是按字母顺序排列的。然后我添加了一个名为bookTitleSort 的string 字段,并尝试了bookTitleSort asc。除了特殊字符外,它工作正常。以其中一个字符开头的字符位于末尾。

【问题讨论】:

    标签: solr


    【解决方案1】:

    使用ICUCollationKeyFilter 获取可识别区域设置的可用排序顺序。链接的 wiki 页面上有一个示例,显示了如何通过 TextField 来做到这一点,KeywordTokenizer 与 ICUCollationKeyFilter 一起:

    <fieldType name="icu_sort_tr" class="solr.TextField">
      <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.ICUCollationKeyFilterFactory" locale="tr" strength="primary"/>
      </analyzer>
    </fieldType>
    

    据我所知,tr 是土耳其语的正确语言环境,但请随时仔细检查。

    【讨论】:

    • 我改用CollationKeyFilterFactory,因为它不需要任何额外的罐子,并且在土耳其语中运行良好。还添加了TurkishLowerCaseFilterFactory 过滤器。无论如何,感谢您为我指明正确的方向。
    【解决方案2】:

    'ICUCollat​​ionKeyFilterFactory' 已弃用。您需要将其指定为架构中的字段类型,例如:

    <fieldType name="string_tr" class="solr.ICUCollationField"  locale="tr" strength="primary"  />
    

    由于 Collat​​ion 库不包含在默认模式中,您需要将其添加到 solrconfig.xml 中。在 solrconfig 中,必须添加“solr-analysis-extras-”、“icu4j-”、“lucene-analyzers-icu-*”。小心只添加一次这些库。所有 jar 将被加载一次并可供所有内核使用。您可以使用 solr 详细模式检查您的库。

    <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-analysis-extras-.*\.jar" />
    <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib" regex=".*\.jar"/> 
    <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" regex=".*\.jar" />
    

    用于以详细模式启动 solr solr 可以将 solr 启动为 bin\solr.cmd start -f -v

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多