官方demo修改了下,可以运行 lucene-6.3.0建立索引代码:
package com.lucene;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.nio.charset.StandardCharsets;import java.nio.file.FileVisitResult;import java.nio.file.Files;import java.nio.file.LinkOption;import java.nio.file.OpenOption;import java.nio.file.Path;import java.nio.file.Paths;import java.nio.file.SimpleFileVisitor;import java.nio.file.attribute.BasicFileAttributes;import java.util.Date;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.document.LongPoint;import org.apache.lucene.document.StringField;import org.apache.lucene.document.TextField;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.index.Term;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;public class IndexFiles { public static void main(String[] args) { String usage = "java org.apache.lucene.demo.IndexFiles [-index INDEX_PATH] [-docs DOCS_PATH] [-update]/n/nThis indexes the documents in DOCS_PATH, creating a Lucene indexin INDEX_PATH that can be searched with SearchFiles"; String indexPath = "index"; String docsPath = null; boolean create = true; for (int i = 0; i < args.length; ++i) { if ("-index".equals(args[i])) { indexPath = args[(i + 1)]; ++i; } else if ("-docs".equals(args[i])) { docsPath = args[(i + 1)]; ++i; } else if ("-update".equals(args[i])) { create = false; } } if (docsPath == null) { System.err.PRintln("Usage: " + usage); System.exit(1); } Path docDir = Paths.get(docsPath, new String[0]); if (!(Files.isReadable(docDir))) { System.out .println("Document directory '" + docDir.toAbsolutePath() + "' does not exist or is not readable, please check the path"); System.exit(1); } Date start = new Date(); try { System.out.println("Indexing to directory '" + indexPath + "'..."); Directory dir = FSDirectory.open(Paths .get(indexPath, new String[0])); Analyzer analyzer = new StandardAnalyzer(); IndexWriterConfig iwc = new IndexWriterConfig(analyzer); if (create) { iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE); } else { iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); } IndexWriter writer = new IndexWriter(dir, iwc); indexDocs(writer, docDir); writer.close(); Date end = new Date(); System.out.println((end.getTime() - start.getTime()) + " total milliseconds"); } catch (IOException e) { System.out.println(" caught a " + e.getClass() + "/n with message: " + e.getMessage()); } } static void indexDocs(IndexWriter writer, Path path) throws IOException { if (Files.isDirectory(path, new LinkOption[0])) { Files.walkFileTree(path, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { try { IndexFiles.indexDoc(writer, file, attrs .lastModifiedTime().toMillis()); } catch (IOException localIOException) { } return FileVisitResult.CONTINUE; } }); } else { System.out.println("else"); indexDoc(writer, path, Files.getLastModifiedTime(path, new LinkOption[0]) .toMillis()); } } static void indexDoc(IndexWriter writer, Path file, long lastModified) throws IOException { System.out.println("file=" + file.toString()); InputStream stream = Files.newInputStream(file, new OpenOption[0]); Throwable localThrowable3 = null; try { Document doc = new Document(); Field pathField = new StringField("path", file.toString(), Field.Store.YES); doc.add(pathField); doc.add(new LongPoint("modified", new long[] { lastModified })); doc.add(new TextField("contents", new BufferedReader( new InputStreamReader(stream, StandardCharsets.UTF_8)))); if (writer.getConfig().getOpenMode() == IndexWriterConfig.OpenMode.CREATE) { System.out.println("adding " + file); writer.addDocument(doc); } else { System.out.println("updating " + file); writer.updateDocument(new Term("path", file.toString()), doc); } } catch (Throwable localThrowable1) { } finally { if (stream != null) if (localThrowable3 != null) { try { stream.close(); } catch (Throwable localThrowable2) { localThrowable3.addSuppressed(localThrowable2); } } else stream.close(); } }}新闻热点
疑难解答