2010-05-15 30 views
0

我正在索引大約100M文檔,這些文檔包含幾個字符串標識符和一百個左右的numaric術語..我不會進行範圍查詢,所以我沒有dugg對Numaric Field太深,但我不認爲它在這裏選擇正確。Lucene(.NET)文檔結構和性能建議

我的問題是,當我開始向我的查詢添加OR條件時,查詢性能迅速下降..所有我的查詢都是在特定的numaric條件下..所以文檔看起來像StringField:[someString]和N DataField:[someNumber ]然後我用DataField來查詢它:((+ 1 +(2 3))(+75 +(3 522))(+99 +88 +(102 155 199)))。

目前這些查詢需要大約7到16秒在我的筆記本電腦上運行..我想確保這真的是他們能做的最好的..我願意接受有關字段結構和查詢結構的建議:-)。

感謝

喬希

PS:我已經讀了關於這裏的所有其他Lucene的性能進行討論,並在Lucene的維基和清醒imiagination ......我有點進一步下跌的兔子洞那麼...

+0

我想在答案可能之前需要更多信息。也許關於你已經嘗試過的一些信息。你有沒有可用的分析工具?如果不是,你認爲你的問題是I/O還是CPU限制?問題似乎是查詢綁定,還是結果檢索綁定?很多問題,但沒有答案... – 2010-05-15 18:14:23

+0

我不確定它的IO/CPU相關,我將相同的索引移動到另一個盒子(Core 2 Quad QX6600)並且結果相同。即使在10,000 RPM猛禽的結果是一樣的......當它住在服務器硬件上時,速度可能會加快。 這個問題不是結果限制,我做了一個「GetCount」收集器,它只是在每次擊中時增加一個int。這就是我在做我的時間測試.. 也只有1200個術語謝謝LUKE)我的FieldCache在2或3個查詢中加載,所以我沒有獲得任何內容:-P – 2010-05-16 12:46:44

回答

0

既然你已經提到你正在做特定的數字查詢而不是範圍查詢,我不會建議你看看在Lucene 3.0中真正快速的數字範圍查詢。

按照你的描述,我想,得分會導致問題。當你有這麼多的嵌套布爾查詢時,評分會變得越來越複雜。分數是浮點數,算術運算速度較慢。如果你不關心分數,寫自定義Collector是個好主意。你可以在我已經鏈接的javadoc中看到這個例子,寫你自己的。

+0

我使用的是Lucene.net 2.9.2,numaricQuery還沒有在那裏。 (如果這是我敢打賭,這將是更快:-)) 此外,評分不涉及這裏..我已經使用我自己的收藏家..上面的數字是基於我的「GetCount」收藏家,並且所有它當collect(int doc)被調用時,增加一個int。在收集器端無法獲得更快的速度,那麼:-P。 – 2010-05-16 12:50:22

+0

所以糾正(重新讀你的評論後).. Numaric範圍查詢是在2.9.2(我知道)..但在看Numaric查詢3.0(我正在考慮移植它自己)後,我意識到你關於numaric範圍查詢..所以亞..希望numaric查詢存在..但他們真的只是術語查詢無論如何,這是我目前的查詢正在變成.. – 2010-05-17 12:41:48