2014-02-23 144 views
0

我想用Lucene在一些文檔中實現文本搜索。該文件是在一個表中提供已經符號化:
|documentID|token|position|
「documentID」是文檔令牌處於
「位置」描述的ID,在該文檔中的位置的標記寫入Lucene - 不同領域的相關數據

我首先嚐試創建索引來搜索令牌並返回documentID。所以我爲每個documentID創建了一個Lucene文檔。對於每個Lucene文檔,我爲本文檔中的每個標記添加了一個IntField'documentID'和幾個StringFields'標記'。因此,沒問題。

現在我開始了第二次嘗試,包括位置信息。首先想到的是:'沒有問題,只需將StringFields'位置'添加到Lucene文檔!'但是......然後我在職位和代幣之間沒有關係。這裏有一個例子就是我想要的到底是:
INPUT:
tomato
OUTPUT:
docID1|position1
docID1|position2
docID2|position1
...

我怎樣才能做到這一點?在我看來,最簡單的解決方案是停止轉換文檔 - > Lucene-文檔,並開始將單個標記映射到Lucene-文檔。
因此,我爲每個唯一的token/documentID組合創建一個Lucene文檔(當然,只適用於包含該標記的documentID)。然後,我將該令牌和documentID作爲字段添加到文檔中。此外,每次擊中一個包含表格'位置'的IntField。
實施例:

StringField 'token1'
IntField 'documentID1'
IntField 'position1'
IntField 'position2'
IntFIeld 'position3'

StringField 'token1'
IntField 'documentID2'
IntField 'position1'
IntField 'position2'

是否有其他方式存儲鏈接的字段?

回答

0

爲什麼你想使用Lucene的呢?你有更多的需求需要一些Lucene功能嗎?如果沒有,你只需要一個「地圖」數據結構。關鍵是令牌。該值包含文檔ID列表以及位置列表。

+0

我想實現一個搜索引擎。將來我想對這些數據進行一些信息提取,因此我將添加更多的表格,包括名稱,地點,事件等等。儘管Lucene索引是持久的,並且包含數千個條目進行了優化。一個地圖就在這裏運行,但它應該是持久和高效的。最後,我想做你的建議,但在Lucene中。 – EarlGrey