2009-04-20 27 views
2

我有這個號碼提取問題。 我想要得到所有沒有特定數字的比賽 例如:125501874,125001873 每個數字在位置2的55都不予考慮。Lucene號碼提取

第一號碼的範圍是0到9,第二個是1-9所以真正的範圍爲[01-99] (我們不能有00作爲前兩個數字)

使用Lucene我想添加NOT字段:[01-99] 55 *

但它似乎沒有工作。有沒有一種簡單的方法來查找?? 55 *並忽略它在搜索(「非字段:[01-99] 55 *」)?

謝謝Lucene的大師

回答

2

謝謝你erickson,你的解決方案可能是最好的,使用ParallelReader如果我只能使用臨時索引,導致我們緩存搜索查詢,我們將需要這些。

但就像你之前說過的,最好從相關數字straighaway的索引開始。

我有另一種解決方案。

NOT field:0?55* 
NOT field:1?55* 
... 
NOT field:9?55* 

它對於我正在做的搜索來說足夠高效,它繞過了第一個字符的通配符限制。如果他們在哪裏檢查更多的數字,或者他們離開始的地方更遠,我不會使用它。 現在我正在測試一百萬行,這對我們的需求非常有效。

+0

是的,這也是一個很好的解決方法。如果您確定字段中的前兩個字符始終爲01-99,您是否可以使用「NOT field:?55 *」 – erickson 2009-04-24 16:06:54

4

如果一個人只有在它的第三和第四位創建「僅索引」字段的Lucene能做到這一點非常有效。完整的值可以在原始字段中「存儲」(或存儲並索引,如果其他查詢使用整個數字)。


更新:後隨註釋問道,「難道[有]的方式來僅在第二位創建一個臨時索引」使用ParallelReader「垂直分區」索引的字段。一個分區可以保存當前索引及其字段,而另一個分區可以是新字段的臨時索引,可能存儲在RAMDirectory中。

假設數字在原始索引中「存儲」,迭代原始索引中的每個文檔,檢索存儲的字段,解析出關鍵數字,並將Document添加到具有新字段的臨時索引。正如ParallelReader文檔所述,文檔編號必須在兩個索引中匹配。

+0

如果我沒有可能添加另一個索引? 我們已經有這些號碼的索引。他們是僅僅在第二位數字上創建臨時索引的方法嗎? – Khan 2009-04-23 18:02:44