第二种使用方式更加的简单,官方文档说,相比于第一种,效率会有降低,下面来看代码。
// 文档上说效率没有前一种方式高
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分词效果: