2012-10-25 21 views
1

我在其中一個字段聲明爲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:

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

這兩個類都可以工作,但TrieFloatField將需要比​​少得多的內存(假設前者使用浮點字段緩存而後者使用字段字段緩存)。請注意,如果您不需要執行範圍查詢,則應設置precisionStep=0

然而,你打的錯誤是非常奇怪的......

+0

謝謝你的答案。事實證明,我的排序錯誤是由於我在使用Solr的Java API時出錯,而與選擇的字段類型無關。你的回答有助於確認這不是所選擇的問題類型,而是讓我找到了解決問題的正確途徑。現在我已經修復了我的Java代碼,我使用了TrieFloatFiled,並且按預期發生了排序(浮動值按自然順序排序)。 –