使用空格对Solrj中的查询进行排序

时间:2012-07-04 09:18:25

标签: solr solrj

我正在使用solr查询一些文档。在这种情况下,我不想按相关性排序结果,我希望它们按标题排序。我在solrj中完成了以下工作:

//sort by title
setSortField("title", SolrQuery.ORDER.asc)

当文档标题中没有空格或斜杠时,这样可以正常工作。当我有4个文档时,标题值的排序方式如下:

"A"
"B"
"C"
"B D"

在我看来,Solr在第一个空格之后开始从一个字段开始排序。 任何想法为什么会这样?

2 个答案:

答案 0 :(得分:0)

我描述的示例是一个构造的示例,但我现在也使用给定示例对其进行了测试,并且存在相同的行为。

我在字段中使用以下配置:

<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>

感谢您的回复。

答案 1 :(得分:0)

请找到要创建的字段类型

{
  "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"
           }]}}
}