maven引入lucene-core,lucene-analyzers-common,lucene-queryparser。
将文档写入索引库方式如下:
Doc d1=new Doc("1","中华人民共和国");
Doc d2=new Doc("2","我爱北京天安门");
//构造lucene文档
Document doc1 = new Document();
doc1.add(new TextField("id",d1.getId(), Field.Store.YES));
doc1.add(new TextField("text",d1.getText(), Field.Store.YES));
Document doc2 = new Document();
doc2.add(new TextField("id",d2.getId(), Field.Store.YES));
doc2.add(new TextField("text",d2.getText(), Field.Store.YES));
//构造分词器和索引库目录的writer
Directory dir= FSDirectory.open(Paths.get("/Users/caster/IdeaProjects/lucene/lucene"));
IndexWriterConfig config=new IndexWriterConfig(new StandardAnalyzer());
IndexWriter indexWriter=new IndexWriter(dir,config);
//写入文档
indexWriter.addDocument(doc1);
indexWriter.addDocument(doc2);
indexWriter.close();
写入后lucene索引库文件夹内容如下:

通过luke工具解析lucene索引库文件:


查询代码:
//查询分词器要和创建索引的分词器一致,会对查询内容进行分词后每个词进行查询
Directory dir= FSDirectory.open(Paths.get("/Users/caster/IdeaProjects/lucene/lucene"));
DirectoryReader ireader = DirectoryReader.open(dir);
IndexSearcher isearcher = new IndexSearcher(ireader);
PhraseQuery.Builder builder = new PhraseQuery.Builder();
builder.add(new Term("text","北"));
PhraseQuery query = builder.build();
ScoreDoc[] hits = isearcher.search(query, 10).scoreDocs;
for (int i = 0; i < hits.length; i++) {
//通过查询返回的文档ID获取到对应的文档信息
Document hitDoc = isearcher.doc(hits[i].doc);
System.out.println(hitDoc.get("text"));//我爱北京天安门
System.out.println(hitDoc.get("id"));//2
}
update by query:
Doc d1=new Doc("1","中华人民共和国万岁");
Document doc1 = new Document();
doc1.add(new StringField("id",d1.getId(), Field.Store.YES));
doc1.add(new TextField("text",d1.getText(), Field.Store.YES));
Directory dir= FSDirectory.open(Paths.get("/Users/caster/IdeaProjects/lucene/lucene"));
IndexWriterConfig config=new IndexWriterConfig(new StandardAnalyzer());
IndexWriter indexWriter=new IndexWriter(dir,config);
//将id字段为1的文档修改为doc1
indexWriter.updateDocument(new Term("id","1"),doc1);
indexWriter.close();
delete by query:
Directory dir= FSDirectory.open(Paths.get("/Users/caster/IdeaProjects/lucene/lucene"));
IndexWriterConfig config=new IndexWriterConfig(new StandardAnalyzer());
IndexWriter indexWriter=new IndexWriter(dir,config);
//将id字段为1的文档删除
indexWriter.deleteDocuments(new Term("id","1"));
indexWriter.close();
网友评论