lucnen 中文分词器 和 删除 和修改词库
导入jar包
package com.bw.lucene; import java.nio.file.Paths; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.LongPoint; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.FSDirectory; import org.wltea.analyzer.lucene.IKAnalyzer; public class WriteDocument { static String path = "E://lucene"; public static void main(String[] args) throws Exception { // writeDoc(); //deleteDocById(); update(); queryAll(); // System.out.println("删除以后"); } public static void queryParser() throws Exception { FSDirectory directory = FSDirectory.open(Paths.get(path)); DirectoryReader reader = DirectoryReader.open(directory); IndexSearcher searcher = new IndexSearcher(reader); Analyzer analyzer = new IKAnalyzer(true); QueryParser parser = new QueryParser("content", analyzer); Query query = parser.parse("大数据"); TopDocs search = searcher.search(query, 10); ScoreDoc[] scoreDocs = search.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { int docID = scoreDoc.doc; Document doc = searcher.doc(docID); System.out.println(Artical.toAritical(doc)); } } public static void writeDoc() throws Exception { FSDirectory directory = FSDirectory.open(Paths.get(path)); // 使用中文分词器 开启smart模式 智能模式 Analyzer analyzer = new IKAnalyzer(true); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(directory, config); Artical art = new Artical(); art.setAuthor("海员"); art.setContent("大数据那家强,北京找北网 学不会报销往返路费 学会后在交费"); art.setId(129L); art.setTitle("招生简章"); art.setUrl("www.txstory.com"); writer.addDocument(art.toDocument()); writer.close(); } // 修改 public static void update() throws Exception { FSDirectory directory = FSDirectory.open(Paths.get(path)); // 使用中文分词器 开启smart模式 智能模式 Analyzer analyzer = new IKAnalyzer(true); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(directory, config); Artical artical = new Artical(); artical.setAuthor("海员"); artical.setContent("大学生班开班了"); artical.setId(130L); artical.setTitle("招生简章"); artical.setUrl("www.txstory.com"); writer.updateDocument(new Term("author","海员"),artical.toDocument()); writer.commit(); writer.close(); } // 删除 // 根据id删除 public static void deleteDocById() throws Exception { FSDirectory directory = FSDirectory.open(Paths.get(path)); // 使用中文分词器 开启smart模式 智能模式 Analyzer analyzer = new IKAnalyzer(true); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(directory, config); // Query query = LongPoint.newRangeQuery("id", 126, 128);// 都删掉 126到128 包括他们都删掉 Query query = LongPoint.newExactQuery("id", 129);// 单个删除 129 writer.deleteDocuments(query); writer.commit(); writer.close(); } // 对数据的删除要用到write对象 根据词条删除 public static void deleteDoc() throws Exception { FSDirectory directory = FSDirectory.open(Paths.get(path)); // 使用中文分词器 开启smart模式 智能模式 Analyzer analyzer = new IKAnalyzer(true); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(directory, config); QueryParser parser = new QueryParser("title", analyzer); Query query = parser.parse("招生"); writer.deleteDocuments(query); writer.commit(); writer.close(); } // 查询所有 public static void queryAll() throws Exception { FSDirectory directory = FSDirectory.open(Paths.get(path)); DirectoryReader reader = DirectoryReader.open(directory); IndexSearcher searcher = new IndexSearcher(reader); Query query = new MatchAllDocsQuery(); TopDocs search = searcher.search(query, 10); ScoreDoc[] scoreDocs = search.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { int docID = scoreDoc.doc; Document doc = searcher.doc(docID); System.out.println(Artical.toAritical(doc)); } } }
作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。