我正在使用 solr 查询一些文档。在这种情况下,我不想按相关性对结果进行排序,我希望它们按标题排序。我在 solrj 中做了以下工作:
//sort by title
setSortField("title", SolrQuery.ORDER.asc)
当文档标题中没有空格或斜杠时,这可以正常工作。当我有 4 个文档时,标题值的顺序如下:
"A"
"B"
"C"
"B D"
在我看来,Solr 从第一个空格之后的字段开始排序。任何想法为什么会发生这种情况?
我描述的示例是一个构造示例,但我现在也使用给定示例对其进行了测试,并且具有相同的行为。
我对该字段使用以下配置:
<fieldType name="textgen" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" enablePositionIncrements="true" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="0" catenateAll="0" catenateNumbers="1" catenateWords="1" generateNumberParts="1" generateWordParts="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" ignoreCase="true" expand="true" synonyms="synonyms.txt"/>
<filter class="solr.StopFilterFactory" enablePositionIncrements="true" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="0" catenateAll="0" catenateNumbers="0" catenateWords="0" generateNumberParts="1" generateWordParts="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
感谢您的回复。
请找到要创建的字段类型
{
"add-field-type" : {
"name":"master_keyword_sort",
"class":"solr.TextField",
"positionIncrementGap":"100",
"analyzer" : {
"tokenizer":{
"class":"solr.KeywordTokenizerFactory" },
"filters":[{
"class":"solr.PatternReplaceFilterFactory",
"pattern":"([^A-Za-z0-9])",
"replacement":"" ,"replace":"all"},
{
"class":"solr.LowerCaseFilterFactory"
}]}}
}