2016-02-26 58 views
1

Tl; dr:如何在排序刻面值时让Solr 4忽略变音符号?在Solr 4中排序刻面值时忽略变音符号

我已经添加了以下四个文件到 “collection1” Solr的核心默认Solr的例子:

<doc> 
    <field name="id">1</field> 
    <field name="cat">manuka</field> 
    <field name="cat">mystery</field> 
</doc> 
<doc> 
    <field name="id">2</field> 
    <field name="cat">mānuka</field> 
    <field name="cat">stuff</field> 
</doc> 
<doc> 
    <field name="id">3</field> 
    <field name="cat">management</field> 
    <field name="cat">stuff</field> 
</doc> 
<doc> 
    <field name="id">4</field> 
    <field name="cat">abc</field> 
    <field name="cat">stuff</field> 
</doc> 

“猫” 的字段被定义为:

<field name="cat" type="string" indexed="true" stored="true" multiValued="true"/> 

和“字符串”类型定义为:

<fieldType name="string" class="solr.StrField" sortMissingLast="true" /> 

当我在“cat”字段上进行方面查询时,按值( http://localhost:8983/solr/collection1/select?q=*%3A*&rows=0&wt=json&indent=true&facet=true&facet.field=cat&facet.sort=index),我得到:

.... 
"facet_fields":{ 
    "cat":[ 
    "abc",1, 
    "management",1, 
    "manuka",1, 
    "mystery",1, 
    "mānuka",1, 
    "stuff",3]}, 
.... 

请注意,mānuka来之后神秘。我想有麦卢卡麦卢卡过来后和东西之前,就是我想要的那种忽略变音符号,包括长音符号。

如果这是一个非方面搜索,它看起来像我可以达到我想要的设置Collation为单独的副本字段和排序(我无法设置该字段本身的排序规则,因为存储数据将是整理键的二进制表示)。然而,看起来这种方法不可能用于方面查询,因为它们只能通过索引或计数来排序。

我可以俯视吗?是否有一些技巧可以让我在需要显示“猫”字段的环境中工作?

回答

0

的问题是有关自定义小的索引顺序。

你的建议是使用Collation。你可以做到这一点,你的方面的顺序是正确的。问题是,无论是CollationField也不ICUCollationField被重写indexedToReadable method

这两个类不能覆盖indexedToReadable,因为一般从词项的映射不可逆的。但是,对于你的情况可能你可以implemenent的ICUCollationField子类,在sencefull方式覆盖indexedToReadable

你的出发点可能是TestICUCollationField

<fieldType name="sort_fr_t" class="solr.ICUCollationField" locale="fr" strength="primary"/> 
    ... 
    <field name="sort_fr" type="sort_fr_t" indexed="true" stored="true" docValues="true" multiValued="true"/> 

,你会在这种情况下看到小值的名称都非常不可读。