如何索引特定文件夾中的所有文檔文件? 假設我有mydocuments
文件夾,其中包含doc
和docx
文件。我需要索引該文件夾中的所有文件以進行高效搜索。你可以建議爲doc
文件建立索引文件夾嗎? 注意:我查找了獅身人面像,但它似乎只索引xml和mssql。索引文件夾中的文件
回答
我的回答適用於Lucene。
Lucene不「直接」提供了一個API來索引文件或文件夾的內容。我們要做的是
- 解析文件。您可以使用支持解析各種文件的Apache Tika。
- 用該信息填充Lucene Document對象。
- 將該文檔傳遞給IndexWriter.addDocument()
- 對每個文件(即索引中的每個不同條目)重複上述步驟。
直接索引的問題即使存在,也會損失字段創建的靈活性以及選擇特定文檔中該字段的內容。
下面是一個很好的教程,你可以找到示例代碼:Lucene in 5 minutes
我認爲你的問題是索引是在某個文件夾中的文本文件列表。所以,這是一個示例代碼來索引它們。但是,如果您要索引word文檔,則需要更改getDocument方法來解析和填充Lucene文檔。
的關鍵點是:
- 創建的IndexWriter。
- 使用dir.listFiles()方法獲取文件夾中的文件列表。
- 迭代遍歷文件並創建它們的Lucene文檔一個在 時間
- 將Lucene文檔添加到索引。
- 一旦完成添加文檔,然後提交更改並關閉indexWriter。
如果您正在尋找解析和閱讀word文檔或PDF文件,那麼您需要使用Apache POI和PDFBox庫。
請注意我只使用RAMDirectory類進行演示,您需要改爲使用FSDirectory。
我希望能夠解決您的問題。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
public class IndexFolders {
public static void main(String[] args) throws FileNotFoundException, IOException{
String path = args[0];
File dir = new File(path);
Directory indexDir = new RAMDirectory();
Version version = Version.LUCENE_40;
Analyzer analyzer = new StandardAnalyzer(version);
IndexWriterConfig config = new IndexWriterConfig(version, analyzer);
IndexWriter indexWriter = new IndexWriter(indexDir, config);
for (File file : dir.listFiles()){
indexWriter.addDocument(getDocument(file));
}
indexWriter.commit();
indexWriter.close();
}
public static Document getDocument(File file) throws FileNotFoundException
{
Scanner input = new Scanner(file);
StringBuilder builder = new StringBuilder();
while(input.hasNext()){
builder.append(input.nextLine());
}
Document document = new Document();
document.add(new Field("text", builder.toString(),org.apache.lucene.document.TextField.TYPE_STORED));
return document;
}
}
而不是隻發佈代碼,嘗試至少包括一個解釋的句子。這意味着不僅僅是對OP的參考,而且也是針對同樣問題來到這裏的其他人的參考。沒有解釋它可以幫助更少的人。謝謝! – Jason 2013-03-08 20:38:06
@Jason感謝您的評論。我已經做到了。 – ameertawfik 2013-03-09 05:29:16
- 1. 文件夾中的文件索引
- 2. 文件夾中的Java搜索索引
- 3. 文件夾問題中的HTACCESS索引
- 4. wordpress中的文件夾索引.htaccess
- 5. 更改文件夾索引到文件夾內的HTML頁面
- 6. 索引內容文件夾到排除的父文件夾
- 7. 搜索主文件夾和子文件夾中的.mp3文件
- 8. 如何減少NTFS中文件夾索引文件的大小?
- 9. 不同文件夾中的多個索引文件?
- 10. Lucene.Net索引文件夾中的所有文件
- 11. 搜索文件夾中的文件
- 12. 搜索文件夾中的文件
- 13. codeigniter阻止索引系統文件夾和文件夾
- 14. 從文件夾引用到文件夾
- 15. Py在文件夾和子文件夾中搜索文件
- 16. htaccess的規則索引到文件夾
- 17. htaccess從子文件夾中的索引頁面重定向到子文件夾
- 18. 使用索引字母從文本文件創建文件夾
- 19. htaccess的重寫索引文件夾到PHP文件
- 20. 如何阻止沒有索引文件的訪問文件夾
- 21. 谷歌索引文件在密碼保護的文件夾?
- 22. 在可執行文件夾中附加html文件,圖像和索引文件
- 23. 查找新文件夾索引
- 24. 如何使用lucene.net索引文件夾
- 25. phpStorm,請勿索引文件夾/樹
- 26. 文件夾中的Vim搜索文本
- 27. 批處理文件搜索文件夾中的文件
- 28. 如何搜索c#文件夾中的文件夾?
- 29. 來自多個文件夾的索引索引
- 30. 未被搜索引擎索引的子文件夾
您使用的是哪個版本的solr?你看過https://wiki.apache.org/solr/ExtractingRequestHandler還是SolrCell?有了它們,您可以索引doc文件。 – jpee 2013-03-08 19:40:50