2014-08-27 104 views
1

我希望能够按字母顺序排序具有本地语言字符的字段,如'Ö','Ş'或'Ç'(土耳其文字符)。是Solr用特殊字符排序

我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进行排序,但结果按字母顺序一点也不。然后我添加了一个名为bookTitleSortstring字段,并尝试bookTitleSort asc。除特殊字符之外,它工作正常。以这些字符之一开头的那些字符就位于最后。

回答

1

使用ICUCollationKeyFilter获取可识别区域的可用排序顺序。还有,告诉您如何可以通过具有TextField其与ICUCollationKeyFilterKeywordTokenizer一起做这个链接的维基页面上的例子:

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

至于我记得TR是土耳其正确的语言环境,但感觉免费重新检查一下。

+0

我用'Collat​​ionKeyFilterFactory'代替,因为它并不需要任何额外的罐子和土耳其的罚款。还添加了'TurkishLowerCaseFilterFactory'过滤器。无论如何,谢谢你指出我正确的方向。 – keune 2014-08-28 09:21:14

0

'ICUCollat​​ionKeyFilterFactory'是dep't。你需要specifiy它作为场型的模式,如:

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

由于整理库不是在默认模式包括你需要将其添加在solrconfig。在solrconfig中,必须添加“solr-analysis-extras- ”,“icu4j-”,“lucene-analysers-icu- *”要小心添加这个库。所有的 罐子将被加载一次,并可供所有核心使用。您可以使用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