Tl; dr:在排序构面值时,如何让Solr 4忽略变音符号?
我在默认的Solr示例中将以下四个文档添加到“collection1”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>
“cat”字段定义为:
<field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>
和“string”类型定义为:
<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是神秘之后。我想让mānuka来到麦卢卡以及之前的东西,也就是说,我想要忽略包括macron在内的变音符号。
如果这是一个非方面的搜索,看起来我可以通过为单独的复制字段设置Collation并按其排序(我无法为字段本身设置排序规则)来实现我想要的效果因为存储的数据将是整理键的二进制表示。但是,看起来这种方法对于构面查询是不可能的,因为它们只能按索引或计数进行排序。
我忽略了什么吗?是否有一些技巧可以让我在需要显示“cat”字段值的环境中工作?
答案 0 :(得分:0)
问题是关于自定义构面的索引顺序。
您的建议是使用Collation。你可以这样做,你的方面的顺序是正确的。问题是,CollationField和ICUCollationField都不会覆盖indexedToReadable method。
这两个类不能覆盖indexedToReadable
,因为通常从单词到术语的映射是不可逆的。但是对于您的情况,您可以实现ICUCollationField
的子类,该子类以一种有效的方式覆盖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"/>
正如您将在本例中看到的那样,facet值的名称非常难以理解。