我在其中一個字段聲明爲TrieFloatField一個Solr模式:Solr的TrieFloat和SortableFloatField,這是最適合浮點數排序
<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的查詢排序
謝謝你的答案。事實證明,我的排序錯誤是由於我在使用Solr的Java API時出錯,而與選擇的字段類型無關。你的回答有助於確認這不是所選擇的問題類型,而是讓我找到了解決問題的正確途徑。現在我已經修復了我的Java代碼,我使用了TrieFloatFiled,並且按預期發生了排序(浮動值按自然順序排序)。 –