1. 程式人生 > >Lucene筆記32-Lucene的擴充套件-Tika的第二種使用方式

Lucene筆記32-Lucene的擴充套件-Tika的第二種使用方式

一、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分詞效果: