lucene 7 删除索引 实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/guotong1988/article/details/85911001
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.*;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.similarities.BM25Similarity;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.IOContext;
import org.apache.lucene.store.RAMDirectory;

import java.io.IOException;
import java.nio.file.Paths;

public class Example {

	public static IndexWriter writer;
	public static RAMDirectory idxDir;
	public static StandardAnalyzer analyzer;

	public static void makeIndex() throws IOException, ParseException {

		FSDirectory fsDir = FSDirectory.open(Paths.get("C:\\Users\\gt\\Desktop\\_ROKID_\\fast-sent-match\\example"));
		idxDir = new RAMDirectory(fsDir, IOContext.DEFAULT);
		//analyzer = new SmartChineseAnalyzer();
		analyzer = new StandardAnalyzer();
		IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
		iwc.setSimilarity(new BM25Similarity());

		iwc.setOpenMode(OpenMode.CREATE);
		writer = new IndexWriter(idxDir, iwc);

		Document doc = new Document();
		doc.add(new TextField("questionID", "82C69C047B89457E86C4799B34B86090", Field.Store.YES));//存储不分词且索引
		doc.add(new TextField("question", "中华人民共和国", Field.Store.YES));


		Document doc2 = new Document();
		doc2.add(new TextField("questionID", "82C69C047B89457Exxxxxxxxxxxxxxx", Field.Store.YES));//存储不分词且索引
		doc2.add(new TextField("question", "浙江省杭州市西湖区", Field.Store.YES));

		writer.addDocument(doc);
		writer.addDocument(doc2);
		int nMaxDoc = writer.maxDoc();
		System.out.println("nMaxDoc = " + nMaxDoc);
		writer.commit();
		writer.close();


		iwc = new IndexWriterConfig(analyzer);
		iwc.setSimilarity(new BM25Similarity());
		iwc.setOpenMode(OpenMode.APPEND);
		writer = new IndexWriter(idxDir, iwc);
		System.out.println("前 = " + writer.numDocs());
//		writer.deleteAll();
		
		String[] stringQuery = {"82C69C047B89457E86C4799B34B86090", "中华人民共和国"};
        String[] fields = {"questionID", "question"};
        Occur[] occ = {Occur.MUST, Occur.MUST};
        Query query = MultiFieldQueryParser.parse(stringQuery, fields, occ, analyzer);
		
		writer.deleteDocuments(query);
		writer.commit();
		writer.forceMergeDeletes();
		writer.commit();
		System.out.println("后 = " + writer.numDocs());
		writer.close();
	}

	public static void main(String[] args) throws IOException, ParseException {
		makeIndex();

		// String[] stringQuery={"2","金古江湖"}; //通过1,2来筛选
		String[] stringQuery = {"82C69C047B89457Exxxxxxxxxxxxxxx", "浙江省杭州市西湖区"};
		String[] fields = {"questionID", "question"};
		Occur[] occ = {Occur.MUST, Occur.MUST};
		Query query = MultiFieldQueryParser.parse(stringQuery, fields, occ, analyzer);

		TopDocs results = null;
		IndexReader reader = DirectoryReader.open(idxDir);
		IndexSearcher searcher = new IndexSearcher(reader);
		results = searcher.search(query, 3);
		ScoreDoc[] hits = results.scoreDocs;
		for (int i = 0; i < hits.length; ++i) {
			Document doc = searcher.doc(hits[i].doc);
			String strDocSent = doc.get("question");
			System.out.println(strDocSent);
		}
	}

}

猜你喜欢

转载自blog.csdn.net/guotong1988/article/details/85911001
今日推荐