我正在使用Lucene來索引和搜索少量的大文檔。使用Lucene站點的演示文件,我已對文檔建立了索引並能夠搜索它們。但是,搜索結果並不特別有用,因爲它指向文檔的文件。對於非常大的文檔,這不是特別有用。Lucene可以從單個索引文件返回多個搜索結果嗎?
我想知道如果Lucene可以索引這些非常大的文檔,並創建一個抽象它們提供更細粒度的結果。
一個例子可能會更好地解釋我的意思。考慮一本非常大的書,比如聖經。一個文件包含聖經的全部文本,因此在演示中,搜索結果「大馬士革」將指向該文件。我想要做的是保留大文檔,但是搜索會返回結果指向書本,章節或甚至與詩歌一樣精確。因此,搜索「大馬士革」可能會返回(除其他外)第23卷第7章第8節。
這是可能的(以及Lucene使用中的最佳實踐),還是應該嘗試將大文檔分割爲許多小文件要索引?
如果它有什麼區別,我使用的是Java Lucene 2.9.0,並且索引HTML文件的大小約爲1MB到4MB。在文件大小方面,這個數字並不大,但相對於閱讀它的人來說卻很大。
我不認爲我已經盡我所能解釋了這一點。這裏舉另一個例子。
說我拿我的大HTML文件,並且(出於參數的緣故)搜索詞「大馬士革」出現3次。一旦在<div>
標籤內在線100上,在線2000上在<p>
標籤內,在線上5000內在<h1>
標籤內。有沒有可能使用Lucene進行索引,這樣會有3個結果,並且它們可以指向該術語所在的特定元素?
我不認爲我想爲該術語提供不同的文檔結果。所以如果術語'大馬士革'在特定的<div>
出現兩次,那隻會有一場比賽。
從Kragen的評論看來,我想要做的就是在Lucene正在經歷索引階段時解析HTML。然後,我可以決定我想作爲解析器讀入內容的一個文檔塊。所以,如果我看到一個具有某個類的div,我可以開始一個新的Lucene文檔,並且當div內容中的單詞被搜索時,它將作爲單獨的命中返回。
這聽起來像我想要做的,這有可能嗎?
使用您的示例,我可以將書籍B保存爲單個文件(在我的情況下爲HTML文件),並從該文件中創建多個Lucene文檔,以便可以將單個文件的所有結果作爲離散形式報告給用戶點擊?當章節位於同一個*文件*中時,是否可以按章節進行索引?感謝您的回答:) – Grundlefleck
您可以通過在索引時爲Lucene提供該文件的一個子集來按章節索引 - 這會爲每個匹配章節提供1次命中。如果您想向用戶展示每次單獨匹配的匹配,那麼您需要查看每個匹配文檔的所有匹配項 - 無法將書分成足夠多的Lucene文檔,以確保每次匹配都能保證對應於該詞/詞組的恰好1次出現。 – Justin