Lucene建立索引流程
原始文件:網際網路上的網頁(爬蟲或蜘蛛)、資料庫中的資料、磁碟上的檔案
建立文件物件(非結構化資料)
文件物件中的屬性不叫屬性現在成為域。
每個 Document 可以有多個 Field ,不同的 Document 可以有不同的 Field,同一個 Document 可以有相同的 Field(域名和域值都相同)。
每個文件都有一個唯一的編號,就是文件id
分析文件
將原始內容包含域的文件,需要再對域中的內容進行分析,分析的過程是經過對原始文件提取單詞、將字母轉為小寫、去除標點符號、去除停用詞等過程生成最終的詞彙單元,可以將詞彙單元理解為一個個單詞。
原文件內容:
Luncene is a Java full-text search engine.
分析後得到的語彙單元:
lucene、java、full、search、engine…
每個單詞叫做一個 Term,不同的域中拆分出來相同的單詞是不同的 Term。Term中包含兩部分一部分是文件的域名,另一部分是單詞的內容。 Term K 域(檔名稱) V spring Term K 域(檔案內容) V spring 剛才兩個Tream不是一個
建立索引
對所有文件分析得出的語彙單元進行建立索引,建立索引的目地是為了搜尋,最終要實現只搜尋被搜尋的語彙單元從而找到 Document(文件)
注意:建立索引是對語彙索引,通過詞語找文件,這種索引的結構叫倒排索引結構。包括索引和文件兩部分,索引即詞彙表,它的規模較小,而文件集合較大。
傳統方式是根據檔案找到該檔案的內容,在檔案內容中匹配搜尋關鍵字,這種方法是順序掃描法,資料量大、搜尋慢
// 建立索引
@Test
public void testIndex() throws Exception {
// 第一步建立一個indexwriter物件
Directory directory = FSDirectory.open(new File("D:\\temp\\index"));
// Directory directory2 = new RAMDirectory();//儲存索引到記憶體中(記憶體索引庫)
//Analyzer analyzer = new StandardAnalyzer();// 官方推薦
Analyzer analyzer = new IKAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer);
IndexWriter indexWriter = new IndexWriter(directory, config);
// 第三步建立Filed域,將field新增到document物件中
File f = new File("D:\\Lucent&solr\\searchsoure");
File[] listFiles = f.listFiles();
for (File file : listFiles) {
// 第二步建立Document物件
Document document = new Document();
// 檔名稱
String file_name = file.getName();
Field fileNameField = new TextField("fileName", file_name, Store.YES);
// 檔案大小
long file_size = FileUtils.sizeOf(file);
Field fileSizeField = new LongField("fileSize", file_size, Store.YES);
// 檔案路徑
String file_path = file.getPath();
Field filePathField = new StoredField("filePath", file_path);
// 檔案內容
String file_content = FileUtils.readFileToString(file);
Field fileContentField = new TextField("fileContent", file_content, Store.NO);
document.add(fileNameField);
document.add(fileSizeField);
document.add(filePathField);
document.add(fileContentField);
// 第四步:使用indexwriter物件將document物件寫入索引庫,此過程進行索引建立。並將索引和document物件寫入索引庫
indexWriter.addDocument(document);
}
// 第五步:關閉IndexWriter物件
indexWriter.close();
}
// 查詢索引
@Test
public void testSearch() throws Exception {
// 第一步:建立一個Directory物件,也就是索引庫存放的位置。
Directory directory = FSDirectory.open(new File("D:\\temp\\index"));// 磁碟硬碟庫
// 第二步:建立一個indexReader物件,需要指定Directory物件。
IndexReader indexReader = DirectoryReader.open(directory);// 流
// 第三步:建立一個indexsearcher物件,需要指定IndexReader物件
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
// 第四步:建立一個TermQuery物件,指定查詢的域和查詢的關鍵詞。
Query query = new TermQuery(new Term("fileName", "java"));
// 第五步:執行查詢。
TopDocs topDocs = indexSearcher.search(query, 2);
// 第六步:返回查詢結果。遍歷查詢結果並輸出。
ScoreDoc[] scoreDocs = topDocs.scoreDocs;// 文件id
for (ScoreDoc scoreDoc : scoreDocs) {
int doc = scoreDoc.doc;
Document document = indexSearcher.doc(doc);
// 檔名稱
String fileName = document.get("fileName");
System.out.println(fileName);
// 檔案內容
String fileContent = document.get("fileContent");
System.out.println(fileContent);
// 檔案大小
String fileSize = document.get("fileSize");
System.out.println(fileSize);
// 檔案路徑
String filePath = document.get("filePath");
System.out.println(filePath);
System.out.println("-----------------");
}
// 第七步:關閉IndexReader物件
indexReader.close();
}
相關文章
- 【Lucene&&Solr】Lucene索引和搜尋流程Solr索引
- lucene第一步,lucene基礎,索引建立索引
- lucene(二) 索引的建立、增刪改查索引
- Lucene中建立索引的效率和刪除索引的實現索引
- Lucene 2.0 對 html檔案建立索引的bugHTML索引
- hadoop異構儲存+lucene索引Hadoop索引
- lucene join解決父子關係索引索引
- lucene索引檔案大小優化小結索引優化
- Lucene索引檔案大小優化方案總結索引優化
- Lucene底層原理和最佳化經驗分享(1)-Lucene簡介和索引原理索引
- 在JAVA中將Elasticsearch索引載入到Lucene APIJavaElasticsearch索引API
- ElasticSearch建立索引Elasticsearch索引
- 深度解析 Lucene 輕量級全文索引實現原理索引
- 基於Java的全文索引引擎Lucene簡介 (轉)Java索引
- 全文索引-lucene,solr,nutch,hadoop之nutch與hadoop索引SolrHadoop
- mysql建立字首索引MySql索引
- mongodb建立索引和刪除索引和背景索引backgroundMongoDB索引
- mysql 建立索引的方法--建立檢視MySql索引
- 【Oracle】-【建立索引】-建立索引的操作原理與一些體會Oracle索引
- 索引組織表上建立BITMAP索引(三)索引
- 索引組織表上建立BITMAP索引(二)索引
- 索引組織表上建立BITMAP索引(一)索引
- MySQL建立索引、修改索引、刪除索引的命令語句MySql索引
- postgresql怎麼建立索引SQL索引
- MySQL建立複合索引MySql索引
- SqlServer 建立全文索引SQLServer索引
- MySQL點陣圖索引解決使用者畫像問題(簡化建立流程)MySql索引
- 建立Vue專案流程Vue
- beego建立專案流程Go
- Java 物件建立的流程Java物件
- 初探Lucene
- Lucene教程
- ElasticSearch分片互動過程(建立索引、刪除索引、查詢索引)Elasticsearch索引
- Oracle如何建立B樹索引Oracle索引
- 資料庫之建立索引資料庫索引
- mysql建立索引和檢視MySql索引
- Oracle大表快速建立索引Oracle索引
- oracle 索引的建立與管理Oracle索引