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();
}
相關文章
- hadoop異構儲存+lucene索引Hadoop索引
- Lucene底層原理和最佳化經驗分享(1)-Lucene簡介和索引原理索引
- 在JAVA中將Elasticsearch索引載入到Lucene APIJavaElasticsearch索引API
- 深度解析 Lucene 輕量級全文索引實現原理索引
- Hive建立索引Hive索引
- DocumentDB 建立索引索引
- mysql建立字首索引MySql索引
- mongodb建立索引和刪除索引和背景索引backgroundMongoDB索引
- MySQL索引建立原則MySql索引
- postgresql怎麼建立索引SQL索引
- MySQL點陣圖索引解決使用者畫像問題(簡化建立流程)MySql索引
- ElasticSearch分片互動過程(建立索引、刪除索引、查詢索引)Elasticsearch索引
- mysql建立索引和檢視MySql索引
- Oracle大表快速建立索引Oracle索引
- Oracle如何建立B樹索引Oracle索引
- 資料庫之建立索引資料庫索引
- 建立索引的優劣勢索引
- 【Mongo】MongoDB索引管理-索引的建立、檢視、刪除MongoDB索引
- GaussDB(for Cassandra)新特性發布:支援Lucene二級索引,讓複雜查詢更智慧索引
- beego建立專案流程Go
- 建立Vue專案流程Vue
- 建立索引後,速度變快原因?以及索引失效總結索引
- MySQL如何建立一個好索引?建立索引的5條建議【宇哥帶你玩轉MySQL 索引篇(三)】MySql索引
- lucene入門使用
- Lucene學習一
- Lucene查詢原理
- Lucene 中的 VInt
- python建立elasticsearch索引的探討PythonElasticsearch索引
- 如何清除建立失敗的索引索引
- elasticsearch(三)----索引建立與刪除Elasticsearch索引
- [20201110]oracle建立索引nosrt.txtOracle索引
- mongodb資料庫如何建立索引?MongoDB資料庫索引
- Mysql索引的建立與刪除MySql索引
- MySQL建立表的時候建立聯合索引的方法MySql索引
- 聯合索引和多個單列索引使用中的索引命中情況及索引建立原則索引
- 建立資料mysql庫流程MySql
- SpringBoot專案建立流程--SpringMVCSpring BootSpringMVC
- mysql 建立和刪除聯合索引MySql索引