2012-11-05 161 views
4

我有一個約100000個項目的索爾索引。 索引的一個字段是一個範圍從0到INT_MAX的整數(實際上索引中的最高值是157)。我嘗試做這個領域的範圍查詢,我得到很奇怪的結果:SOLR範圍查詢的奇怪行爲

範圍查詢:

  • nb_validations:10 *] =>返回40499項
  • nb_validations:[9 TO * ] =>返回6項(至少應爲40499 ?? !!
  • nb_validations:[8 TO *] =>返回13項

完全匹配的查詢:

  • nb_validations:10 =>返回2005年項目
  • nb_validations:9 =>返回6項

我在日誌中沒有任何錯誤,我Solr的配置看起來不錯。字段被聲明爲int並被索引和存儲。

這是什麼問題?我的索引是否可以被破壞?

謝謝。

+0

那麼'[* TO 10]'的結果是什麼呢?我想知道範圍查詢語法本身沒有問題(例如,不會將空格編碼爲'%20')。 – raina77ow

+0

[* TO 10]給出了很好的結果(約57000項,反映了球場上的分佈) –

回答

4

您應該使用sint來存儲值並使用該字段進行範圍查詢。

<field name="age" type="sint" indexed="true" stored="true"/> 

如果您將字段類型設置爲整數,Solr仍可能將其視爲字符串。

<field name="age" type="integer" indexed="true" stored="true"/> 

Documentation: -

編碼 「整數」 值作爲簡單 串的傳統數字字段類型。除了包含索引爲字符串的數字值的現有 索引的人員之外,不應使用此類。新模式 應該使用TrieIntField。

字段值將數字進行排序,但範圍查詢(和其他 功能依賴於數值範圍),將不能按預期: 值將Unicode字符串命令,而不是數字順序進行評估。

+0

好吧,聽起來很有趣。我會盡快檢查。更改字段類型時是否必須重建索引? –

+0

是......需要重新索引。 – Jayendra

+0

將字段類型從整數更改爲sint,解決了問題。謝謝。 –

-1

使用「int」類型,範圍查詢將正常工作。

<field name="my_name" type="int" indexed="true" stored="false"/> 

<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>