初识lucene-增删改查(三)

一、lucene的索引的创建

      

package com.stx.testlucene;

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

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.StringField;
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;

public class DelIndex {

	public int[] id={1,2,3,4,5,6};
	public String[] name={"熊战","小黑","VS","猛犸","小小","人吗"};
	public String[] type={"天灾","近卫"};
	public Directory dir;
	public String indexPath;
	public IndexWriter indexWriter;
	//初始化变量就是索引的存储位置
	public DelIndex() throws IOException{
		indexPath="E:\\测试lucene\\index";
		dir=FSDirectory.open(new File(indexPath));
		indexWriter=getIndexWriter();
	}
	//创建索引
	@Test
	public void createIndex() throws IOException{
		for(int i=0;i<id.length;i++){
			Document doc=new Document();
			doc.add(new StringField("name",name[i],Field.Store.YES));
			doc.add(new IntField("id",id[i],Field.Store.YES));
			if(i%2==0){
				doc.add(new StringField("type",type[0],Field.Store.YES));
			}else{
				doc.add(new StringField("type",type[1],Field.Store.YES));
			}
			indexWriter.addDocument(doc);
		}
		indexWriter.close();
	}
	//得到indexWriter对象值
	public IndexWriter getIndexWriter() throws IOException{
		Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_42, true);
		IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_42,
				analyzer);
		return new IndexWriter(dir, iwc);
	}
}

二、lucene索引搜索

@Test
	public void createSearch() throws IOException{
		indexWriter.close();
		IndexReader indexReader=DirectoryReader.open(dir);
		IndexSearcher indexSearch=new IndexSearcher(indexReader);
		Term term=new Term("type","天灾");
		TermQuery termQuery=new TermQuery(term);
		TopDocs hits=indexSearch.search(termQuery, 3);
		ScoreDoc[] docs=hits.scoreDocs;
		System.out.println("总的搜索条数"+hits.totalHits);
		for(ScoreDoc score:docs){
			Document doc=indexSearch.doc(score.doc);
			System.out.println(doc.get("name"));
			System.out.println(doc.get("type"));
		}
		
	}

 结果

总的搜索条数3
熊战
天灾
VS
天灾
小小
天灾

 三、索引的删除操作

    全部删除

indexWriter.deleteAll(); 结果肯定是什么也搜不到了

    匹配删除

  

                 Term term=new Term("type","天灾");
		TermQuery termQuery=new TermQuery(term);
		//把匹配的删除掉
		indexWriter.deleteDocuments(term);
		indexWriter.close();
//结果搜索为0
--------------------------------------------------------------------------------------
改为搜索 近卫 操作 有记录的

   删除信息

IndexReader.maxDoc();   //总文当数
IndexReader.numDeletedDocs();//得到索引删除条数

猜你喜欢

转载自xiaozhou09.iteye.com/blog/1835509