【问题标题】:Sort strings alphabetically with Solr使用 Solr 按字母顺序对字符串进行排序
【发布时间】:2018-04-11 17:46:26
【问题描述】:

上下文

我有一个“标题”的字符串字段,我想按字母顺序排序。我使用 Solr 4.10.2 进行搜索和排序。由于 strFields 默认区分大小写,我注意到 Solr 是通过 ASCII 排序(大写字母优先于小写字母)而不是字母顺序对我的标题进行排序。

当前行为(asc 排序)

数学:代数导论

数学:简介

欲望行为(asc sort)

数学:简介

数学:代数导论

schema.xml 中的代码

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

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

即使重启Solr,重新索引,排序还是ASCII排序

【问题讨论】:

  • 分析页面为您的领域显示了什么?
  • 不幸的是,我的 solr 实例的分析页面并不是特别有用——我不确定我的配置是否正确。通常,分析页面不会显示我的查询被标记器或过滤器转换,它仅显示编码为字节的查询。

标签: sorting solr


【解决方案1】:

该字段在索引时必须小写。

删除定义中的type 属性,使其适用于索引和查询:

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
  <analyzer>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

如果您想要为每个阶段使用不同的分析器,请包含两个 &lt;analyzer&gt; 定义,用类型属性 "index""query" 区分。

【讨论】:

  • 可靠的答案——我在索引之前缩小了每个标题。
猜你喜欢
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 2015-07-23
相关资源
最近更新 更多