lucene简单入门

Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。


1,所需的基础jar包
lucene-analyzers-common-6.4.2.jar
lucene-core-6.4.2.jar
lucene-memory-6.4.2.jar
lucene-queryparser-6.4.2.jar
官方下载地址:http://www.apache.org/dyn/closer.lua/lucene/java/6.4.2

2,lucene倒排索引原理


3,一些基础代码实现
package com.zhuyun.demo;


import java.nio.file.Paths;

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.StringField;
import org.apache.lucene.index.DirectoryReader;
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.search.IndexSearcher;
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.FSDirectory;
import org.junit.Test;

public class LuceneDemo {
	
	@Test
	public void createIndex() throws Exception {                
		IndexWriter indexWriter = new IndexWriter(FSDirectory.open(Paths.get("index/")), new IndexWriterConfig(new StandardAnalyzer()));
		Document document = new Document();
		document.add(new StringField("age", "17", Store.YES));
		document.add(new StringField("name", "cai", Store.YES));
		document.add(new StringField("content", "aaaa", Store.YES));
		
		
		indexWriter.addDocument(document);
		indexWriter.close();
		}
	
	@Test    
	public void searchIndex() throws Exception {        
		IndexSearcher indexSearcher = new IndexSearcher(DirectoryReader.open(FSDirectory.open(Paths.get("index/"))));    
		
		Query query = new TermQuery(new Term("age", "17"));       //查询age=15的文档
//		Query query = new QueryParser("content", analyzer).parse("张三是个教师!");
		
		TopDocs topDocs = indexSearcher.search(query, 10);        //返回符合条件的前10条
		System.out.println("count:" + topDocs.totalHits);       //查询出来的结果总数
		ScoreDoc[] scoreDocs = topDocs.scoreDocs;       
		Document document = null;        
		for (ScoreDoc scoreDoc : scoreDocs) {           
			int docId = scoreDoc.doc;            
			document = indexSearcher.doc(docId);            
			String age = document.get("age");            
			String name = document.get("name");          
			String content = document.get("content");          
			System.out.println("age:" + age + ",name:" + name + ",content:"                    
			+ content);        
			}    
		
		
		}
}

第一个方法实现了索引的创建,创建完以后,工程中出现以下内容:


第二个方法,根据条件查询结果:
count:1
age:17,name:cai,content:aaaa


由于初次接触lucene,了解的东西也不多。就代码来看,个人感觉lucene跟MongoDB(文档数据库)非常类似。文档中的 Paths.get("index/"),其中"index/"类似于MongoDB的集合名称,而Document在MongoDB中有完全相同的概念。整个过程类似于将文档建一个索引然后存起来,然后根据索引的条件来查询结果。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值