前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Lucene的使用(java)

Lucene的使用(java)

作者头像
用户5927264
发布2019-08-01 10:05:16
4820
发布2019-08-01 10:05:16
举报
文章被收录于专栏:OSChinaOSChina
1
1

1 testLucene 入门程序

代码语言:javascript
复制
package com.shi.lucene;

import java.io.File;

import org.apache.commons.io.FileUtils;
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.Field.Store;
import org.apache.lucene.document.LongField;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;


/**
 * 
 * @author: SHF
 * @date: 2018年3月6日 下午4:37:44
 * @Description: 第一个入门级lucune程序
 * 创建索引
 */
public class LuceneFirst {

    //创建索引
	@Test
	public void testLucene()throws Exception{
		// 1 创建java工程 ,并导入jar包
		//2 创建一个indexWriter对象.
			//  2.1 指定索引库的存放位置 Directory对象
		 	//  2.2 指定一个分析器,对内容进行分析
		Directory directory=FSDirectory.open(new File("E:\\Eclipse\\javaProject\\31Lucene\\temp"));
		Analyzer analyzer=new StandardAnalyzer();//官方推荐的分析器
		IndexWriterConfig config=new IndexWriterConfig(Version.LATEST, analyzer);
		IndexWriter indexWriter=new IndexWriter(directory, config);
		  
		 //3 创建document对象
		 // 4 创建field对象,将field添加到document对象中
		 File f=new File("E:\\Eclipse\\javaProject\\31Lucene\\text");
		 File[] files=f.listFiles();
		 for(File file:files){
			 Document document=new Document();
			 //文件名称
			 String file_name=file.getName();
			 Field fileNameField=new TextField("fileName", file_name, Store.YES);
			 //文件大小
			 Long file_size=FileUtils.sizeOf(file);
			 Field fileSizeField=new LongField("fileSize", file_size, Store.YES);
			 //文件路径
			 String file_path=file.getPath();
			 Field filePathField=new StoredField("filePath", file_path);
			 //文件内容
			 String file_content=FileUtils.readFileToString(file);
			 Field fileContentField=new TextField("fileContent", file_content, Store.YES);
		 
			 document.add(fileNameField);
			 document.add(fileSizeField);
			 document.add(filePathField);
			 document.add(fileContentField);
			 
			//5 使用indexWriter对象讲document对象写入索引库,此过程进行索引创建,并将索引和document对象写入索引库
			 indexWriter.addDocument(document);
		 }
		 // 6 关闭indexWriter对象
		 indexWriter.close();
	}


        //搜索索引
	@Test
	public void searchLuceneTest()throws Exception{
		//1 创建一个Directory对象,也就是存放索引的位置
		Directory directory= FSDirectory.open(new File("E:\\Eclipse\\javaProject\\31Lucene\\temp"));
		//2 创建一个indexReader对象,需要指定Directory对象
		IndexReader indexReader=DirectoryReader.open(directory);
		//3 创建一个indexsearcher对象,需要指定IndexReader对象
		IndexSearcher indexSearcher=new IndexSearcher(indexReader);
		//4 创建一个TermQuery对象,指定查询的域和关键字。
		Query query=new TermQuery(new Term("fileName","mysql"));
		//5 执行查询
		TopDocs topDocs= indexSearcher.search(query, 10);
		//6 返回查询结果,遍历查询结果并输出
		ScoreDoc[] scoreDocs=topDocs.scoreDocs;
		for(ScoreDoc scoreDoc:scoreDocs){
			int doc=scoreDoc.doc;
			Document document=indexSearcher.doc(doc);
			String fileName=document.get("fileName");
			System.out.println(fileName);
			String fileContent=document.get("fileContent");
			System.out.println(fileContent);
			String fileSize=document.get("fileSize");
			System.out.println(fileSize);
			String filePath=document.get("filePath");
			System.out.println(filePath);
			
			System.out.println("--------------------------");
		}
		//7 关闭IndexReader对象
		indexReader.close();
	}
}

2 LuceneManager

代码语言:javascript
复制
package com.shi.lucene;

import java.io.File;
import java.io.IOException;

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.Store;
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.Term;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.queryparser.xml.builders.NumericRangeQueryBuilder;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.NumericRangeQuery;
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.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

/**
 * 
 * @author: SHF
 * @date: 2018年3月7日 上午10:49:20
 * @Description:索引库的管理
 * 增加  入门程序
 * 查询  入门程序
 * 修改  
 * 删除
 */
public class LuceneManager {
	
	//*************获取IndexWriter对象*************
	public IndexWriter getIndexWriter() throws IOException{
		//2 创建一个indexWriter对象.
			//  2.1 指定索引库的存放位置 Directory对象
		 	//  2.2 指定一个分析器,对内容进行分析
		Directory directory=FSDirectory.open(new File("E:\\Eclipse\\javaProject\\31Lucene\\temp"));
//		Analyzer analyzer=new StandardAnalyzer();//官方推荐的分析器
		Analyzer analyzer=new IKAnalyzer();//使用IK中文分词器
		IndexWriterConfig config=new IndexWriterConfig(Version.LATEST, analyzer);
		IndexWriter indexWriter=new IndexWriter(directory, config);
		return indexWriter;
	}
	
	//*************删除所有*************
	@Test
	public void testDeleteAll() throws IOException{
		IndexWriter indexWriter=getIndexWriter();
		indexWriter.deleteAll();
		indexWriter.close();
	}
	
	//*************根据条件删除*************
	@Test
	public void testDeleteQuery() throws IOException{
		IndexWriter indexWriter=getIndexWriter();
		Query query=new TermQuery(new Term("fileName","mysql"));
		indexWriter.deleteDocuments(query);;
		indexWriter.close();
	}
	
	//*************修改*************
	@Test
	public void testUpdate()throws Exception{
		IndexWriter indexWriter=getIndexWriter();
		Document doc=new Document();
		doc.add(new TextField("fileName","fileName修改测试",Store.YES));
		doc.add(new TextField("fileContent","fileContent修改测试",Store.YES));
		indexWriter.updateDocument(new Term("fileName","mysql"), doc,new IKAnalyzer());
		indexWriter.close();
	}
	
	//*************查询所有  根据范围查询*************
	@Test
	public void testMarchAllDocsQuery()throws Exception{
		//1 创建一个Directory对象,也就是存放索引的位置
		Directory directory= FSDirectory.open(new File("E:\\Eclipse\\javaProject\\31Lucene\\temp"));
		//2 创建一个indexReader对象,需要指定Directory对象
		IndexReader indexReader=DirectoryReader.open(directory);
		//3 创建一个indexsearcher对象,需要指定IndexReader对象
		IndexSearcher indexSearcher=new IndexSearcher(indexReader);
		
		//4 创建一个TermQuery对象,指定查询的域和关键字。
//		Query query=new MatchAllDocsQuery();//查询所有
//		Query query=NumericRangeQuery.newLongRange("fileSize", 0l, 100l, true, true);//根据范围查询
//		Query query=NumericRangeQuery.newDoubleRange("fileSize", 0.0, 15075.0, true, true);
		
		/**
		 * *************组合查询*************
		 */
		BooleanQuery query=new BooleanQuery();
		Query query1=new TermQuery(new Term("fileName","mysql"));
		Query query2=new TermQuery(new Term("fileName","查询"));
		query.add(query1,Occur.MUST);
		query.add(query2,Occur.MUST);
		System.out.println(query);
		//5 执行查询
		TopDocs topDocs= indexSearcher.search(query, 10);
		//6 返回查询结果,遍历查询结果并输出
		ScoreDoc[] scoreDocs=topDocs.scoreDocs;
		for(ScoreDoc scoreDoc:scoreDocs){
			int doc=scoreDoc.doc;
			Document document=indexSearcher.doc(doc);
			String fileName=document.get("fileName");
			System.out.println(fileName);
			String fileContent=document.get("fileContent");
			System.out.println(fileContent);
			String fileSize=document.get("fileSize");
			System.out.println(fileSize);
			String filePath=document.get("filePath");
			System.out.println(filePath);
			System.out.println("--------------------------");
		}
		//7 关闭IndexReader对象
		indexReader.close();
	}
	
	
	
		//*************条件解释的对象查询*************
		@Test
		public void testQueryParser()throws Exception{
			//1 创建一个Directory对象,也就是存放索引的位置
			Directory directory= FSDirectory.open(new File("E:\\Eclipse\\javaProject\\31Lucene\\temp"));
			//2 创建一个indexReader对象,需要指定Directory对象
			IndexReader indexReader=DirectoryReader.open(directory);
			//3 创建一个indexsearcher对象,需要指定IndexReader对象
			IndexSearcher indexSearcher=new IndexSearcher(indexReader);
			
			//4 创建一个TermQuery对象,指定查询的域和关键字。
			/**
			 * 条件解释
			 */
			QueryParser queryParser=new QueryParser("fileName",new IKAnalyzer());
			//*:*   域:值
			Query query=queryParser.parse("+fileName:mysql +fileName:查询");
			System.out.println(query);
			//5 执行查询
			TopDocs topDocs= indexSearcher.search(query, 10);
			//6 返回查询结果,遍历查询结果并输出
			ScoreDoc[] scoreDocs=topDocs.scoreDocs;
			for(ScoreDoc scoreDoc:scoreDocs){
				int doc=scoreDoc.doc;
				Document document=indexSearcher.doc(doc);
				String fileName=document.get("fileName");
				System.out.println(fileName);
				String fileContent=document.get("fileContent");
				System.out.println(fileContent);
				String fileSize=document.get("fileSize");
				System.out.println(fileSize);
				String filePath=document.get("filePath");
				System.out.println(filePath);
				System.out.println("--------------------------");
			}
			//7 关闭IndexReader对象
			indexReader.close();
		}
	
}
1
1
2
2
6666
6666
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 testLucene 入门程序
  • 2 LuceneManager
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档