1

フィールドが 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 があることもわかります。

http://www.jarvana.com/jarvana/view/org/apache/solr/solr-core/3.5.0/solr-core-3.5.0-javadoc.jar!/org/apache/solr/schema/SortableFloatField .html

しかし、ドキュメントは、並べ替え基準として使用されたときの動作については何も述べていません。

私の質問は単純です: Solr クエリで適切な (自然な) 昇順および降順の並べ替えに使用できるように、これらの 2 つの型のどちら (または他の型) が浮動小数点数を格納するのに適しているかです。

4

1 に答える 1

2

どちらのクラスも動作するはずですが、TrieFloatField必要なメモリはSortableDoubleField(前者が float フィールド キャッシュを使用し、後者が String フィールド キャッシュを使用する場合) よりもはるかに少なくなります。範囲クエリを実行する必要がない場合は、 を設定する必要があることに注意してくださいprecisionStep=0

しかし、あなたがヒットしたバグは非常に奇妙です...

于 2012-10-28T16:42:06.633 に答える