2009-12-14 80 views
2

我的索引包含人民的信息,姓名,年齡,電話電子郵件等Solr的小面範圍與整數

我年齡小面。我將年齡分組有點像日期範圍功能。

我的範圍是:

0 to 10 
    11 to 20 
    21 to 30 
    31 to 40 etc etc 

當我做一個查詢:

?q=*:*&facet=true&fq=age:[21+TO+30] 

它返回所有我想要的年齡在21至30範圍內,但它也返回了3歲。

?q=*:*&facet=true&fq=age:[11+TO+20] 

這樣做同樣的事情,但它返回的年齡2

?q=*:*&facet=true&fq=age:[0+TO+10] 

這是做同樣的事情,但它返回的年齡是1. 任何人都可以向我解釋 - 這是一個solr?

+1

請張貼您的schema.xml的年齡段的行。 – 2009-12-14 16:57:09

+0

你也可以發佈完整的Solr請求..和Solr的結果 – CraftyFella 2009-12-14 22:20:00

+0

Schema定義: 這就是完整的請求。 – Mark 2009-12-15 10:28:29

回答

3

從拖網我發現,Solr的索引的所有數據串網 - 甚至當你將它定義爲一個整數。它仍然在Solr中的字符串:

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

所以我需要做的是:

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

如果你想訂購的整數這是這樣的,我承擔的「燒結靶「類型是專門爲此設計的。

乾杯

+0

與solr 1.4你現在有一個更高性能的選項:tint – Karussell 2010-05-29 21:01:46

+1

由於Lucene是底層引擎,所有索引值按照字典順序排序。 solr中的「sint」數據類型表示一個可排序的int,它根據預期對整數值進行排序。 – jro 2011-04-14 06:24:39

1

我對solr一無所知,但我會猜測它將您的範圍視爲字母而不是數字。

你可能想看看this answer其中有連接到各種文檔討論一個非常類似的問題

3

在你的要求,你沒有任何facet queries。您正在使用filter queries。這將縮小你的結果。

也許你可以嘗試添加一些facet.query到你的請求,並從facet.counts區域複製結果到上面的問題。至少,這將告訴你許多成果的Solr是怎麼想的是在不同的年齡段:

&facet.query=age:[21+TO+30]&facet.query=age:[11+TO+20]&facet.query=age:[0+TO+10]&facet.query=age:[*+TO+2]&facet.query=age:[*+TO+3]