Lucene入门学习二

接上篇:增删改查

增加:这里不做过多阐述。

删除:删除全部,根据条件删除

修该:先删除,后添加

查询(*):查询所有,精确查询,根据数值范围查询,组合查询,解析查询。

  1 package com.itheima.luncence;
  2 
  3 import java.io.File;
  4 import java.io.IOException;
  5 
  6 import org.apache.lucene.analysis.Analyzer;
  7 import org.apache.lucene.analysis.standard.StandardAnalyzer;
  8 import org.apache.lucene.document.Document;
  9 import org.apache.lucene.document.Field.Store;
 10 import org.apache.lucene.document.TextField;
 11 import org.apache.lucene.index.DirectoryReader;
 12 import org.apache.lucene.index.IndexReader;
 13 import org.apache.lucene.index.IndexWriter;
 14 import org.apache.lucene.index.IndexWriterConfig;
 15 import org.apache.lucene.index.Term;
 16 import org.apache.lucene.queryparser.classic.QueryParser;
 17 import org.apache.lucene.search.BooleanClause.Occur;
 18 import org.apache.lucene.search.BooleanQuery;
 19 import org.apache.lucene.search.IndexSearcher;
 20 import org.apache.lucene.search.MatchAllDocsQuery;
 21 import org.apache.lucene.search.NumericRangeQuery;
 22 import org.apache.lucene.search.Query;
 23 import org.apache.lucene.search.ScoreDoc;
 24 import org.apache.lucene.search.TermQuery;
 25 import org.apache.lucene.search.TopDocs;
 26 import org.apache.lucene.store.Directory;
 27 import org.apache.lucene.store.FSDirectory;
 28 import org.apache.lucene.util.Version;
 29 import org.junit.Test;
 30 import org.wltea.analyzer.lucene.IKAnalyzer;
 31 
 32 /**
 33  * 
 34  * @author jack cheng
 35  *
 36  */
 37 public class LuceneManager {
 38 
 39     //公共部分保存到索引库
 40     public IndexWriter getIndexWriter() throws Exception{
 41         // 1、创建Directory
 42         // JDK 1.7以后 open只能接收Path
 43         Directory directory = FSDirectory.open(new File("D:\\BaiduYunDownload\\index"));
 44         // 2、创建IndexWriter
 45         Analyzer analyzer = new StandardAnalyzer();
 46         IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);
 47         IndexWriter indexWriter = new IndexWriter(directory, config);//************
 48         //indexWriter.deleteAll();// 清除以前的index
 49         return indexWriter;
 50     }
 51     
 52     //全删除
 53     @Test
 54     public void deleteAll() throws Exception{
 55         IndexWriter writer = getIndexWriter();
 56         writer.deleteAll();
 57         writer.close();
 58         System.out.println("删除成功");
 59     }
 60     //根据条件删除
 61     @Test
 62     public void deleteBy() throws Exception{
 63         IndexWriter writer = getIndexWriter();
 64         Query query = new TermQuery(new Term("filename", "apache"));
 65         writer.deleteDocuments(query);;
 66         writer.close();
 67         System.out.println("删除成功2");
 68     }
 69     
 70     //修该
 71     @Test
 72     public void update() throws Exception{
 73         IndexWriter writer = getIndexWriter();
 74         Document doc = new Document();
 75         doc.add(new TextField("fileN", "测试文件名",Store.YES));
 76         doc.add(new TextField("fileC", "测试文件内容",Store.YES));
 77         writer.updateDocument(new Term("filename", "lucene"), doc, new IKAnalyzer());//删除第一个,加入第二个
 78         
 79         writer.close();
 80         System.out.println("修该成功");
 81     }
 82     
 83

 84     //***************************************************************************
 85     //公共部分读取索引库方法
 86     public IndexSearcher getIndexSearcher() throws Exception{
 87         //创建索引库
 88         Directory directory = FSDirectory.open(new File("D:\\BaiduYunDownload\\index"));
 89         //创建indexreader
 90         IndexReader indexReader = DirectoryReader.open(directory);
 91         //创建Searcher
 92         IndexSearcher indexSearcher = new IndexSearcher(indexReader);
 93         return indexSearcher;
 94     
 95     }
 96     
 97     //结果显示(公共部分)
 98     public void printResult(IndexSearcher indexSearcher,Query query) throws Exception{
 99         TopDocs topDocs = indexSearcher.search(query, 20);
100         int totalHits = topDocs.totalHits;
101         System.out.println("记录数" + totalHits);
102         // 6、根据TopDocs获取ScoreDoc对象
103         ScoreDoc[] scoreDocs = topDocs.scoreDocs;
104         for (ScoreDoc scoreDoc : scoreDocs) {
105 
106             // 7、根据searcher和ScoreDoc对象获取具体的Document对象
107             Document document = indexSearcher.doc(scoreDoc.doc);
108 
109             // 8、根据Document对象获取需要的值
110             System.out.println("文件名:" + document.get("filename") 
111             + " " + "文件路径:" + document.get("filepath") 
112             + "文件大小:"+ document.get("filesize") 
113             + "文件内容:" + document.get("content"));
114             System.out.println("-----------------------------------------");
115         }
116 
117     }
118     
119     //查询所有
120     @Test
121     public void testAll() throws Exception{
122         IndexSearcher indexSearcher =getIndexSearcher();
123         Query query = new MatchAllDocsQuery();
124         printResult(indexSearcher, query);
125         //关闭流
126         indexSearcher.getIndexReader().close();
127     } 
128     
129     //更具数据范围查询
130     @Test
131     public void testnumber() throws Exception{
132         IndexSearcher indexSearcher =getIndexSearcher();
133         Query query = NumericRangeQuery.newLongRange("filesize", 400l, 1000000l, true, true);
134         printResult(indexSearcher, query);
135         //关闭流
136         indexSearcher.getIndexReader().close();
137     }
138     
139     //组合查询
140         @Test
141         public void Booleanquery() throws Exception{
142             IndexSearcher indexSearcher =getIndexSearcher();
143             BooleanQuery booleanquery = new BooleanQuery();
144             TermQuery query2 = new TermQuery(new Term("filename","changes"));
145             TermQuery query1 = new TermQuery(new Term("content","changes"));
146             booleanquery.add(query2,Occur.MUST);
147             booleanquery.add(query1,Occur.MUST);
148             printResult(indexSearcher, booleanquery);
149             //关闭流
150             indexSearcher.getIndexReader().close();
151         }
152         
153         //解析查询(多看文档)
154         @Test
155         public void testqueryparser() throws Exception{
156             IndexSearcher indexSearcher =getIndexSearcher();
157 
158             QueryParser queryParser = new QueryParser("filename",new IKAnalyzer());
159             //Query query =queryParser.parse("*:*");//查询条件(查询所有)
160             Query query =queryParser.parse("changes");
161             printResult(indexSearcher, query);
162             //关闭流
163             indexSearcher.getIndexReader().close();
164         }
165 }

 

posted @ 2018-12-27 22:26  土木转行的人才  阅读(206)  评论(1编辑  收藏  举报