首页>代码>apache lucene 4.10.0入门单元测试代码demo>/lucene_4_10_0_demo/src/main/java/com/zuidaima/lucene/test/Main.java
package com.zuidaima.lucene.test; import java.io.File; import java.io.IOException; import java.util.Random; import java.util.UUID; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.demo.IndexFiles; import org.apache.lucene.demo.SearchFiles; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.IntField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.MultiFieldQueryParser; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanClause.Occur; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; import org.databene.contiperf.PerfTest; import org.databene.contiperf.Required; import org.databene.contiperf.junit.ContiPerfRule; import org.databene.contiperf.timer.RandomTimer; import org.junit.Rule; import org.junit.Test; import org.wltea.analyzer.lucene.IKAnalyzer; public class Main { static String indexPath = "c:/index/"; static String str1 = "司南1 test tes1百1"; static String str2 = "司南2 test tes2百2"; static String str3 = "司南3 tst tes3百3"; static String str4 = "司南4 test tes4百4"; static String str5 = "司南5 tes tes5百5"; static String line = "test百度"; static int hitsPerPage = 1; static String fieldContent = "content"; // static Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_4_10_0); static Analyzer analyzer = new IKAnalyzer(false); @Test public void index() throws Exception { Directory dir = FSDirectory.open(new File(indexPath)); IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_4_10_0, analyzer); iwc.setOpenMode(OpenMode.CREATE); // Optional: for better indexing performance, if you // are indexing many documents, increase the RAM // buffer. But if you do this, increase the max heap // size to the JVM (eg add -Xmx512m or -Xmx1g): // // iwc.setRAMBufferSizeMB(256.0); IndexWriter writer = new IndexWriter(dir, iwc); Document doc = null; Field field = null; doc = new Document(); field = new TextField(fieldContent, str1, Field.Store.YES); doc.add(field); Field typeField = new IntField("type", 1, Field.Store.YES); doc.add(typeField); writer.addDocument(doc); doc = new Document(); field = new TextField(fieldContent, str2, Field.Store.YES); doc.add(field); typeField = new IntField("type", 1, Field.Store.YES); doc.add(typeField); writer.addDocument(doc); doc = new Document(); field = new TextField(fieldContent, str3, Field.Store.YES); doc.add(field); typeField = new IntField("type", 1, Field.Store.YES); doc.add(typeField); writer.addDocument(doc); doc = new Document(); field = new TextField(fieldContent, str4, Field.Store.YES); doc.add(field); typeField = new IntField("type", 1, Field.Store.YES); doc.add(typeField); writer.addDocument(doc); doc = new Document(); field = new TextField(fieldContent, str5, Field.Store.YES); doc.add(field); typeField = new IntField("type", 0, Field.Store.YES); doc.add(typeField); writer.addDocument(doc); writer.close(); } @Test public void searchByKeys() throws Exception { index(); IndexReader reader = DirectoryReader.open(FSDirectory.open(new File( indexPath))); IndexSearcher searcher = new IndexSearcher(reader); String[] keys = new String[] { "test", "0" }; String[] fields = new String[] { "title", "type" }; Query query = MultiFieldQueryParser.parse(keys, fields, analyzer); TopDocs results = searcher.search(query, 5 * hitsPerPage); ScoreDoc[] hits = results.scoreDocs; int numTotalHits = results.totalHits; int start = 0; int end = Math.min(numTotalHits, hitsPerPage); for (int i = start; i < end; i++) { Document doc = searcher.doc(hits[i].doc); String content = doc.get("content"); System.out.println(content); } reader.close(); } @Test public void search1() throws Exception { index(); IndexReader reader = DirectoryReader.open(FSDirectory.open(new File( indexPath))); IndexSearcher searcher = new IndexSearcher(reader); QueryParser parser = new QueryParser(fieldContent, analyzer); Query query = parser.parse(line); TopDocs results = searcher.search(query, 5 * hitsPerPage); ScoreDoc[] hits = results.scoreDocs; int numTotalHits = results.totalHits; for (int i = 0; i < hits.length; i++) { Document doc = searcher.doc(hits[i].doc); String content = doc.get("content"); System.out.println(content); } reader.close(); } @Test public void indexFromFile() throws Exception { String[] args = { "-index", "c:/lucene/index/", "-docs", "c:/lucene/docs/" }; IndexFiles.main(args); } @Test public void searchFromFile() throws Exception { String[] args = { "-index", "c:/lucene/index/" }; SearchFiles.main(args); } @Test public void test2() throws Exception { String indexPath = "E:\\Lucene\\index"; // 索引保存目录 Directory dir = FSDirectory.open(new File(indexPath)); IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_4_10_0, analyzer); IndexWriter indexWriter = new IndexWriter(dir, iwc); indexWriter.deleteAll(); indexWriter.commit(); Document doc = new Document(); Field fieldType = new TextField("type", "0", Field.Store.YES); doc.add(fieldType); Field fieldContents = new TextField("contents", "今晚的辩题很道地:在我们这些人当中?", Field.Store.YES); doc.add(fieldContents); Field fieldId = new TextField("id", "1", Field.Store.YES); doc.add(fieldId); indexWriter.addDocument(doc); System.out.println(doc); doc = new Document(); fieldType = new TextField("type", "0", Field.Store.YES); doc.add(fieldType); fieldContents = new TextField("contents", "我们为电影《今朝》是一部不错的影片。", Field.Store.YES); doc.add(fieldContents); fieldId = new IntField("id", 2, Field.Store.YES); doc.add(fieldId); indexWriter.addDocument(doc); System.out.println(doc); doc = new Document(); fieldType = new TextField("type", "0", Field.Store.YES); doc.add(fieldType); fieldContents = new TextField("contents", "我们到底是啥意思呢?", Field.Store.YES); doc.add(fieldContents); fieldId = new IntField("id", 3, Field.Store.YES); doc.add(fieldId); indexWriter.addDocument(doc); System.out.println(doc); indexWriter.close(); System.out.println("------------------------------------------------"); IndexReader reader = DirectoryReader.open(FSDirectory.open(new File( indexPath))); IndexSearcher searcher = new IndexSearcher(reader); // 要查找的字符串数组 String[] stringQuery = { "影片意思", "0" }; // 待查找字符串对应的字段 String[] fields = { "contents", "type" }; Occur[] occ = { Occur.MUST, Occur.MUST }; Query query = MultiFieldQueryParser.parse(stringQuery, fields, occ, new StandardAnalyzer()); TopDocs results = searcher.search(query, 5 * hitsPerPage); ScoreDoc[] hits = results.scoreDocs; for (int i = 0; i < hits.length; i++) { Document _doc = searcher.doc(hits[i].doc); System.out.println("Document内容为 : " + _doc); } System.out.println("共检索出符合条件的Document " + hits.length + " 个。"); } @Test public void test3() throws Exception { String indexPath = "E:\\Lucene\\index"; // 索引保存目录 Directory dir = FSDirectory.open(new File(indexPath)); IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_4_10_0, analyzer); IndexWriter indexWriter = new IndexWriter(dir, iwc); indexWriter.deleteAll(); indexWriter.commit(); Document doc = new Document(); Field fieldType = new TextField("type", "0", Field.Store.YES); doc.add(fieldType); Field fieldContents = new TextField("contents", "今晚的辩题很道地:在我们这些人当中?", Field.Store.YES); doc.add(fieldContents); Field fieldId = new TextField("id", "1", Field.Store.YES); doc.add(fieldId); indexWriter.addDocument(doc); System.out.println(doc); doc = new Document(); fieldType = new TextField("type", "0", Field.Store.YES); doc.add(fieldType); fieldContents = new TextField("contents", "java我们为电影《今朝》是一部不错的影片。", Field.Store.YES); doc.add(fieldContents); fieldId = new IntField("id", 2, Field.Store.YES); doc.add(fieldId); indexWriter.addDocument(doc); System.out.println(doc); doc = new Document(); fieldType = new TextField("type", "0", Field.Store.YES); doc.add(fieldType); fieldContents = new TextField("contents", "我们到底是啥意思呢?", Field.Store.YES); doc.add(fieldContents); fieldId = new IntField("id", 3, Field.Store.YES); doc.add(fieldId); indexWriter.addDocument(doc); System.out.println(doc); indexWriter.close(); System.out.println("------------------------------------------------"); IndexReader reader = DirectoryReader.open(FSDirectory.open(new File( indexPath))); IndexSearcher searcher = new IndexSearcher(reader); BooleanQuery query = new BooleanQuery(); String key = "java"; String type = "0"; Query contentQuery = new TermQuery(new Term("contents", key)); query.add(contentQuery, BooleanClause.Occur.MUST); Query typeQuery = new TermQuery(new Term("type", type)); query.add(typeQuery, BooleanClause.Occur.MUST); TopDocs results = searcher.search(query, 5); ScoreDoc[] hits = results.scoreDocs; for (int i = 0; i < hits.length; i++) { Document _doc = searcher.doc(hits[i].doc); System.out.println("Document内容为 : " + _doc); } System.out.println("共检索出符合条件的Document " + hits.length + " 个。"); } @Test public void test4() throws Exception { System.out.println("Main thread waiting..."); String indexPath = "E:\\Lucene\\index"; // 索引保存目录 Directory dir = FSDirectory.open(new File(indexPath)); IndexWriterConfig iwc1 = new IndexWriterConfig(Version.LUCENE_4_10_0, analyzer); final IndexWriter indexWriter1 = new IndexWriter(dir, iwc1); System.out.println(Thread.currentThread().getName() + " "); Document doc = new Document(); Field fieldType = new TextField("type", "0", Field.Store.YES); doc.add(fieldType); Field fieldContents = new TextField("contents", "今晚的辩题很道地:在我们这些人当中?", Field.Store.YES); doc.add(fieldContents); Field fieldId = new TextField("id", new Random().nextInt(1000) + "", Field.Store.YES); doc.add(fieldId); try { indexWriter1.addDocument(doc); indexWriter1.close(); } catch (IOException e) { e.printStackTrace(); } // IndexWriterConfig iwc2 = new IndexWriterConfig(Version.LUCENE_4_10_0, // analyzer); // IndexWriter indexWriter2 = new IndexWriter(dir, iwc2); } @Rule public ContiPerfRule rule = new ContiPerfRule(); static IndexWriter indexWriter1 = null; static String indexPath2 = "E:\\Lucene\\index"; // 索引保存目录 static IndexReader reader = null; static { Directory dir; try { dir = FSDirectory.open(new File(indexPath2)); IndexWriterConfig iwc1 = new IndexWriterConfig( Version.LUCENE_4_10_0, analyzer); indexWriter1 = new IndexWriter(dir, iwc1); reader = DirectoryReader.open(dir); } catch (IOException e) { e.printStackTrace(); } } @Test @PerfTest(invocations = 10, threads = 10, timer = RandomTimer.class, timerParams = { 20, 60 }) @Required(max = 15000, average = 8000) public void testMultiThread() throws IOException { indexWriter1.deleteAll(); indexWriter1.commit(); print("delete"); UUID id = UUID.randomUUID(); Document doc = new Document(); Field fieldType = new TextField("type", "0", Field.Store.YES); doc.add(fieldType); Field fieldContents = new TextField("contents", "今晚的辩题很道地:在我们这些人当中?" + id, Field.Store.YES); doc.add(fieldContents); Field fieldId = new TextField("id", id + "", Field.Store.YES); doc.add(fieldId); try { indexWriter1.addDocument(doc); indexWriter1.commit(); } catch (IOException e) { e.printStackTrace(); } print("add"); } public void print(String tag) throws IOException { String name = Thread.currentThread().getName(); System.out.println("--------------------start " + name + " " + tag + "----------------------------------"); String key = "今晚"; Query contentQuery = new TermQuery(new Term("contents", key)); IndexSearcher searcher = new IndexSearcher(reader); TopDocs results = searcher.search(contentQuery, 5); ScoreDoc[] hits = results.scoreDocs; for (int i = 0; i < hits.length; i++) { Document _doc = searcher.doc(hits[i].doc); System.out.println(_doc.get("contents") + " " + name + " " + tag); } System.out.println("--------------------end " + name + " " + tag + "----------------------------------\n"); } }

813405250 LV5
2021年1月2日
pengkui LV14
2020年6月25日
96199chao LV3
2019年12月21日
人间蒸发 LV23
2019年4月21日
2985225214 LV10
2019年4月18日
764938214 LV7
2019年1月25日
justinlucas LV6
2018年11月9日
icestan LV2
2018年6月22日
hefenyuan91 LV11
2018年3月30日
yidongdematong LV2
2018年3月14日