- 自己動手寫分布式搜索引擎
- 羅剛
- 315字
- 2020-11-28 15:52:46
3.2.5 更新索引庫中的索引文檔
對于分詞列來說,直接更新索引中的值很困難。可以采用先刪除舊文檔,然后再向索引增加傳入的新文檔的方法實現更新索引。
通過IndexWriter.updateDocument方法更新文檔。
indexWriter.updateDocument(new Term("url", "http://www.lietu.com"), document);
如果只希望更新個別列而保持其他的列不動就會有問題。為了解決這個問題,可以搜索索引中的當前文檔,改變要改變的列,然后把修改后的文檔作為參數傳給updateDocument()。
public void searchAndUpdateDocument(IndexWriter writer, IndexSearcher searcher, Document updateDoc, Term term) throws IOException { TermQuery query = new TermQuery(term); TopDocs hits = searcher.search(query, 10); if (hits.scoreDocs.length == 0) { throw new IllegalArgumentException("索引中沒有匹配的結果"); } else if (hits.scoreDocs.length > 1) { throw new IllegalArgumentException("Given Term matches more than 1 document in the index."); } else { int docId = hits.scoreDocs[0].doc; //找出舊的文檔 Document doc = searcher.doc(docId); List<Field> replacementFields = updateDoc.getFields(); for (Field field : replacementFields) { String name = field.name(); String currentValue = doc.get(name); if (currentValue ! = null) { //替換列值 Field = new Field(name, term.text()); //刪除所有出現的值舊列 doc.removeFields(name); //插入替換列 doc.add(field); } else { //新加到列 doc.add(field); } } //把舊文檔更改后重新寫入索引 writer.updateDocument(term, doc); } }
推薦閱讀
- Photoshop CC 2018實用教程
- Premiere Pro 2022短視頻剪輯、調色與特效制作實戰(全彩微課版)
- FreeSWITCH 1.0.6
- Rhino 6.0中文版入門、精通與實戰
- 中文版 Photoshop CC 從入門到精通
- After Effects CC 2019 影視后期特效合成案例教程
- 剪映視頻后期剪輯零基礎入門到精通
- UI功夫:PC和APP界面設計全流程圖解
- 中文版Photoshop CS6應用技法教程
- PostgreSQL 9.0 High Performance
- After Effects 2022從入門到精通
- 傳奇:ZBrush數字雕刻大師之路(第2版)
- 精通AutoCAD 2013機械設計
- Illustrator CS6平面設計案例教程(微課版)
- OpenSceneGraph 3.0: Beginner's Guide