Solr - 按字段字符数和字典值排序

时间:2015-09-06 13:49:24

标签: java solr

基本上我有以下问题, 我的索引中有3个文档:

test activ1

test activ9

test activ15

当我按照他们的标题排序时,我想得到:

test activ1

test activ9

test activ15

但实际上我得到的是:

test activ1

test activ15

test activ9

标题字段类型的定义如下:

<fieldType name="title" class="solr.TextField" omitNorms="false" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

我试图调查Similarity类来改变lengthNorm,但是我无法获得其中的字段值来计算字段长度。

有什么想法吗?

谢谢!

编辑:使用的查询:

select?q=title:test*&sort=title+asc

1 个答案:

答案 0 :(得分:0)

  

sort参数以升序(asc)或降序(desc)顺序排列搜索结果。该参数可以与数字或字母内容一起使用。方向可以全部小写或全部大写字母输入(即asc或ASC)。

Solr按字母顺序返回结果。按字母顺序,当您比较test activ15test activ9时,test activ15将首先出现,因为1首先出现9

您期望或想到的是数值,9小于15但是solr将它们视为字符串(字母)。您已配置的分析器链将以文本形式输出令牌。所以solr将无法单独处理文本中的数字。所以我认为,输出是正确的。

从文档中:Solr排序功能需要field进行KeywordTokenizer分析,因此它会生成一个单词。基本上,它期望该术语完全是数字或字母,后面就是您的数据。

修改
您可能需要编写自己的自定义排序逻辑。请这post。它包含有关使用FieldComparatorSourceFieldComparator编写自定义排序逻辑的一些信息。