基本上我有以下问题, 我的索引中有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
答案 0 :(得分:0)
sort参数以升序(asc)或降序(desc)顺序排列搜索结果。该参数可以与数字或字母内容一起使用。方向可以全部小写或全部大写字母输入(即asc或ASC)。
Solr按字母顺序返回结果。按字母顺序,当您比较test activ15
和test activ9
时,test activ15
将首先出现,因为1
首先出现9
。
您期望或想到的是数值,9
小于15
但是solr将它们视为字符串(字母)。您已配置的分析器链将以文本形式输出令牌。所以solr将无法单独处理文本中的数字。所以我认为,输出是正确的。
从文档中:Solr排序功能需要field
进行KeywordTokenizer
分析,因此它会生成一个单词。基本上,它期望该术语完全是数字或字母,后面就是您的数据。
修改强>
您可能需要编写自己的自定义排序逻辑。请这post。它包含有关使用FieldComparatorSource
和FieldComparator
编写自定义排序逻辑的一些信息。