2011-04-27 33 views
0

我有一個Lucene索引與「唯一鍵」Solr的:找到最後/最獨特的鍵和範圍搜索

<uniqueKey>ID</uniqueKey> 

據我所知,這個鍵必須是「文本」(不是int或長)。

<field name="ID" type="string" indexed="true" stored="true"/> 

一個小的應用程序使用lucene索引來搜索這些記錄,這些記錄是自上次運行該應用程序以來添加的。

爲了達到這個目標,我試着以下。

  1. 裝入最後一個ID(從平面文件) 到變量$ OLDID
  2. 獲得當前(最後一個/最高)ID 從Solr的/ Lucene的入變 $ currentID
  3. 執行範圍搜索之間 $ OLDID和$ currentID
  4. 保存$ currentID成下一個搜索/下一運行平面文件

不幸的是我注意到一個問題:

A.)如何找到最高的ID?

或B)我如何處理的唯一密鑰作爲數字,而不是文本/字符

我想類似的東西:

http://localhost:8080/solr/select/?defType=func&q=max(ID,0)&fq=ID:[$oldID+TO+$currentID]&fl=ID 

...返回奇怪的認爲:「999999」作爲最高價值。這是不正確的,因爲最高的ID是1043725.我認爲這是因爲ID是一個文本字段

C.)也許有任何其他的方式來搜索只在最後添加recoreds?

感謝您的幫助!

回答

2

Solr的uniqueKey字段可以支持Solr支持的任何數據類型類。雖然潛在的Lucene索引本身將所有存儲/索引數據視爲文本,但Solr管理翻譯以根據數據類型處理索引數據。

您所指的string field-type restriction是您在solr config中啓用了QueryElevationComponent。如果您尚未啓用該功能,則可以使您的uniqueKey很長時間來解決您的問題。

+0

這是一個非常有趣的信息 - 我從來沒有聽說過QueryElevationComponent。通過閱讀 - > http://wiki.apache.org/solr/QueryElevationComponent,我還有一個問題需要了解是否禁用QueryElevationComponent是一個上帝的想法(無關緊要)。只是爲了理解這個特性:如果我沒有明確地使用它,沒有效果。這是一個預先準備好的太陽能功能,默認情況下處於活動狀態,可以提升特殊效果所以,如果我不在我的應用程序中使用該功能,我可以禁用它,沒有任何副作用!? – 2011-04-28 07:41:59

+0

查詢高程允許通過直接用特定索引條目取代計算/評分結果來操縱搜索結果 - 將其視爲某些搜索用例的覆蓋。默認情況下,它被禁用。無論如何,如果你不使用它,你可以禁用它,而沒有副作用。 – jro 2011-04-28 14:57:06

+0

謝謝你的回答。排序和使用主鍵(ID)現在可以正常工作。 :-) – 2011-04-29 07:24:52