在Solr 4

时间:2016-02-26 01:06:53

标签: sorting solr solr4

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”字段值的环境中工作?

1 个答案:

答案 0 :(得分:0)

问题是关于自定义构面的索引顺序。

您的建议是使用Collation。你可以这样做,你的方面的顺序是正确的。问题是,CollationFieldICUCollationField都不会覆盖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值的名称非常难以理解。