フィールドが TrieFloatField として宣言されている Solr スキーマがあります。
<fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
(...)
<field
name="someField"
type="tfloat"
indexed="true"
stored="false"
multiValued="false" />
それを使用して結果を並べ替えると、次のようになります。
solrQuery.addSortField("someField", ORDER.asc);
solrQuery.addSortField("score", ORDER.desc);
浮動小数点数が正しい番号順で返されません。つまり、次のような結果が得られます。
0.31 0.67 0.80 15.13 0.09 15.13 0.04
さらに奇妙なのは、このフィールドを使用して結果を並べ替えると、何らかの並べ替えが行われることです (たとえば、並べ替えフィールドをまったく使用しないと、順序が異なります)。また、ソート順をascからdescに変更しても、結果は同じ順序になります。
これには TrieFloat 型がうまくいくと思いました。ただし、ドキュメントには、「浮動小数点フィールドにアクセス可能な Lucene TrieRange 処理」であるとしか言及されていないことがわかります。
http://lucene.apache.org/solr/api-4_0_0-ALPHA/org/apache/solr/schema/TrieFloatField.html
そして、正直なところ、それが何を意味するのかよくわかりません。また、SortableFloatField があることもわかります。
しかし、ドキュメントは、並べ替え基準として使用されたときの動作については何も述べていません。
私の質問は単純です: Solr クエリで適切な (自然な) 昇順および降順の並べ替えに使用できるように、これらの 2 つの型のどちら (または他の型) が浮動小数点数を格納するのに適しているかです。