lucene简单入门

来源:互联网 发布:四阶矩阵行列式计算 编辑:程序博客网 时间:2024/06/16 18:21

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 {@Testpublic 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:1age:17,name:cai,content:aaaa


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





0 0
原创粉丝点击