Lucene索引库维护

1.删除全部

public IndexWriter getIndexWriter() throws IOException{
		Directory directory=FSDirectory.open(new File("D:\\资料\\index"));
		Analyzer analyzer=new IKAnalyzer();
		IndexWriterConfig config=new IndexWriterConfig(Version.LATEST,analyzer);
		return new IndexWriter(directory,config);
	}
	@Test
	public void testAllDelete()throws  Exception{
		IndexWriter indexWriter=getIndexWriter();
		indexWriter.deleteAll();
		indexWriter.close();
	}

2.指定条件删除

@Test
    public void testDelete()throws  Exception{
        IndexWriter indexWriter=getIndexWriter();
        Query query=new TermQuery(new Term("fileName","apache"));
        indexWriter.deleteDocuments(query);
        indexWriter.close();
    }

3.索引库的修改

@Test
	public void testUpdate() throws IOException{
		IndexWriter indexWriter=getIndexWriter();
		Document doc=new Document();
		doc.add(new TextField("fileN","测试文件名",Store.YES));
		doc.add(new TextField("fileC","测试文件内容",Store.YES));
		indexWriter.updateDocument(new Term("fileName","lucene"),doc,new IKAnalyzer());
		indexWriter.close();
	}

4.查询所有

	public IndexSearcher getIndexSearcher() throws IOException{
		//创建一个Directory对象,也就是索引库位置
		Directory directory=FSDirectory.open(new File("D:\\资料\\index"));
		//创建一个IndexReader对象,需要指定directory对象
		IndexReader indexReader=DirectoryReader.open(directory);
		//创建一个IndexSearch对象,需要指定indexReader对象
		return new IndexSearcher(indexReader);
	}
	//执行查询结果
	public void printResult(IndexSearcher indexSearch,Query query) throws IOException{
		TopDocs topDocs=indexSearch.search(query, 2);
		//返回查询结果,遍历查询结果并返回
		ScoreDoc[] scoreDocs=topDocs.scoreDocs;
		for(ScoreDoc scoreDoc:scoreDocs){
			int doc=scoreDoc.doc;
			Document document=indexSearch.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);

		}
	}
	//查询所有
	@Test
	public void testMatchAllDocsQuery() throws IOException{
		IndexSearcher indexSearcher=getIndexSearcher();
		Query query=new MatchAllDocsQuery();
		printResult(indexSearcher,query);
		//关闭资源
		indexSearcher.getIndexReader().close();	
	}

5.根据数值范围查询

@Test
	public void testNumberRangeQuery() throws IOException{
		IndexSearcher indexSearcher=getIndexSearcher();
		Query query=NumericRangeQuery.newLongRange("fileSize",100L,200L,true,true);
		printResult(indexSearcher,query);
		//关闭资源
		indexSearcher.getIndexReader().close();	
	}

6.组合查询

@Test
	public void testBooleanQuery() throws IOException{
		IndexSearcher indexSearcher=getIndexSearcher();
		BooleanQuery query=new BooleanQuery();
		Query query1=new TermQuery(new Term("fileName","apacher"));
		Query query2=new TermQuery(new Term("fileContent","lucene"));
		query.add(query1,Occur.MUST);
		query.add(query2,Occur.MUST);
		printResult(indexSearcher,query);
		//关闭资源
		indexSearcher.getIndexReader().close();	
	}

7.条件解析的对象查询

@Test
	public void testQueryParser() throws ParseException, IOException{
		IndexSearcher indexSearcher=getIndexSearcher();
		QueryParser queryParser=new QueryParser("fileName",new IKAnalyzer());
		Query query=queryParser.parse("*:*");
		
		printResult(indexSearcher,query);
		//关闭资源
		indexSearcher.getIndexReader().close();
	}

8.多默认域查询

@Test
		public void testMultiFieldQueryParser() throws ParseException, IOException{
			IndexSearcher indexSearcher=getIndexSearcher();
			String[] fields={"fileName","fileContent"};
			MultiFieldQueryParser queryParser=new MultiFieldQueryParser(fields,new IKAnalyzer());
			Query query=queryParser.parse("lucene is java");
			
			printResult(indexSearcher,query);
			//关闭资源
			indexSearcher.getIndexReader().close();
		}

猜你喜欢

转载自blog.csdn.net/qq_36594703/article/details/80465073