solr多重排序无法按预期工作

solr多重排序无法按预期工作,solr,solr4,Solr,Solr4,“我的文档”有两个索引属性-名称(字符串)和版本(编号) 我希望在相同的分数内,文档将按以下顺序显示 分数(描述)、名称(描述)、版本(描述) 因此,我使用以下方法进行查询: http://localhost:8983/solr/vault/select? q=BOM&fl=*:score& sort=score+desc,Name+desc,Version+desc 在结果中我得到了以下结果: <doc> <

“我的文档”有两个索引属性-名称(字符串)和版本(编号)
我希望在相同的分数内,文档将按以下顺序显示

分数(描述)、名称(描述)、版本(描述)

因此,我使用以下方法进行查询:

http://localhost:8983/solr/vault/select?
           q=BOM&fl=*:score& 
           sort=score+desc,Name+desc,Version+desc
在结果中我得到了以下结果:

<doc>
   <str name="Name">BOM Total test2</str>
   ...
   <int name="Version">2</int>
   ...
   <float name="score">2.2388418</float>
</doc>
<doc>
   <str name="Name">BOM Total test - Copy</str>
   ...
   <int name="Version">2</int>
   ...
   <float name="score">2.2388418</float>
</doc>
<doc>
  <str name="Name">BOM Total test2</str>
  ...
  <int name="Version">1</int>
  ...
  <float name="score">2.2388418</float>
</doc>

物料清单总测试2
...
2.
...
2.2388418
BOM总测试-副本
...
2.
...
2.2388418
物料清单总测试2
...
1.
...
2.2388418
得分相等,但名称未排序

我做错了什么

编辑: 模式定义

 ....
 <field name="Name" type="text_en" indexed="true" stored="true" required="true"/>
 <field name="Version" type="int" indexed="true" stored="true" required="true"/>
 ....
。。。。
....

如果您查看
文本\u en
字段类型中应用的所有令牌过滤器、分析器等,这会使其不太适合排序。对于字符串值的排序,最好使用特定的字段类型进行排序。在过去,我使用以下fieldType对字符串字段进行排序

 <fieldType name="lowercase_sort" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.TrimFilterFactory" />
    </analyzer>
 </fieldType>

Solr示例架构还包括以下用于排序的字段类型:

 <fieldType name="alphaOnlySort" class="solr.TextField" 
     sortMissingLast="true" omitNorms="true">
  <analyzer>
    <!-- KeywordTokenizer does no actual tokenizing, so the entire
         input string is preserved as a single token
      -->
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <!-- The LowerCase TokenFilter does what you expect, which can be
         when you want your sorting to be case insensitive
      -->
    <filter class="solr.LowerCaseFilterFactory" />
    <!-- The TrimFilter removes any leading or trailing whitespace -->
    <filter class="solr.TrimFilterFactory" />
    <!-- The PatternReplaceFilter gives you the flexibility to use
         Java Regular expression to replace any sequence of characters
         matching a pattern with an arbitrary replacement string, 
         which may include back references to portions of the original
         string matched by the pattern.

         See the Java Regular Expression documentation for more
         information on pattern and replacement string syntax.

         http://java.sun.com/j2se/1.6.0/docs/api/java/util/regex/package-summary.html
      -->
    <filter class="solr.PatternReplaceFilterFactory"
            pattern="([^a-z])" replacement="" replace="all"
    />
  </analyzer>
</fieldType>

然后定义一个用于排序的附加字段,可能如下所示:

 <field name="Name_Sort" type="lowercase_sort" indexed="true" stored="false"/>

使用copyField填充此字段

 <copyField src="Name" dest="Name_Sort"/>


然后在查询中对这个新的
Name\u sort
字段进行排序。

您是如何定义架构中的字段的?我问这些字段是什么的确切原因。此外,您可能希望使用debug=true调试查询,并在管理面板(通常位于:)中查看分析文本的外观