2012-07-16 100 views
3

我正在研究一些當範圍過濾器處於活動狀態時,範圍構面將相應更新的內容。如果沒有過濾器,我使用默認範圍&的差距。如果設置了過濾器,我會進行第二次solr調用以重新計算小平面範圍間隙。Solr:計算兩個給定日期之間的差值,其中一個值爲*

因此,例如,首先我會展示10年差距的範圍方面。當你過濾其中的一個時,它會顯示1YEAR的10個範圍分面。如果你再次過濾,它會顯示12個桶,1個月的範圍等...

這種作品,但我有麻煩時,範圍過濾器包括*。 Solr知道如何在給出solrfield:[1960-01-01T00:00:00Z TO *]時正確地過濾結果,但我不知道如何根據*重新計算日期範圍刻面間隙。現在我計算兩個日期之間的差異作爲unix時間戳,並基於此計算範圍間隔。

另外,有沒有一個名字,我想在這裏做什麼?我稱之爲'可變範圍空白',但我不確定這是否正確。

我甚至不確定我所做的是否是最好的方法。任何建議是受歡迎的。

編輯:我的問題歸結爲:我想計算每個solr查詢中字段的最高和最低日期之間的差異(如unix timestamp)。編輯2:我做的每個solr調用大約需要300ms(在一個相對較小的索引上)。這是相當多的情況下,我做了2個額外的電話與日期排序查找查詢中的最高和最低日期值。然後用正確的日期間隔(並從/到值)執行第4次solr調用,會稍微慢一些。

+0

我能想到的唯一方法就是在日期字段上使用faceting並設置'facet.limit = -1'(或任何其他負數)。但是這對你來說可能是行不通的,因爲它會帶回每個價值的日期以及每個價值的記錄。 – 2012-09-06 03:30:38

回答

0

您可以將它變成熟悉的「限制日期範圍」情況。如果將來您的數據不可能設置日期時間,那麼您可以使用NOW替換*,始終接收相同的結果集(因爲沒有日期可以晚於當前時間),並根據當前時間戳計算間隔。