Lucene筆記32-Lucene的擴充套件-Tika的第二種使用方式
阿新 • • 發佈:2018-11-29
一、Tika的第二種使用方式
第二種使用方式更加的簡單,官方文件說,相比於第一種,效率會有降低,下面來看程式碼。
// 文件上說效率沒有前一種方式高 public String fileToTextEasy(File file) { Tika tika = new Tika(); Metadata metadata = new Metadata(); // 可以自定義metadata的值,同理,可以設定很多的值,這裡就不演示了 // 對於Tika已經設定過的值,設定是無效的,只能對沒有設定過的值進行設定 metadata.set(Metadata.AUTHOR, "王劭陽"); try { String text; // 使用這何種方式,因為沒有傳入metadata,所以輸出的內容中只有自己設定的Author text = tika.parseToString(file); // 傳入metadata引數的方式,因為傳入了metadata引數,所以輸出的內容有tika獲取到的和自己設定的 // text = tika.parseToString(new FileInputStream(file), metadata); for (String name : metadata.names()) { System.out.println(name + "-->" + metadata.get(name)); } return text; } catch (IOException e) { e.printStackTrace(); } catch (TikaException e) { e.printStackTrace(); } return null; }
二、對建立索引進行改進
這裡只需要將Field的引數進行變化一下就可以了,詳情看程式碼,為了和之前作對比,使用Luke來檢視下最終生成的索引,這裡使用的分詞器不好的原因,中文分詞被分成了一個字一個字的,換成IK分詞器之後,就正常了。
public void indexWithTika() { try { Directory directory = FSDirectory.open(new File("E:\\Lucene\\IndexLibrary")); IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new MMSegAnalyzer())); Document document = new Document(); document.add(new Field("content", new Tika().parse(file))); indexWriter.addDocument(document); indexWriter.close(); } catch (IOException e) { e.printStackTrace(); } }
MMSegAnalyzer分詞效果:
IKAnalyzer分詞效果: