Lucene的入门

Lucene简介

Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。


Lucene最初是由Doug Cutting所撰写的,是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎的主要开发者,后来在Excite担任高级系统架构设计师,目前从事 于一些INTERNET底层架构的研究。他贡献出Lucene的目标是为各种中小型应用程式加入全文检索功能。


OSChina 使用 Lucene 实现全文搜索。


在线Javadoc:http://tool.oschina.net/apidocs/apidoc?api=lucene-3.6.0



首先我们来个简单的测试例子

我们的基础环境的搭建

我们首先是jdk必须1.8以上的

然后就是我们需要在官网 上下载 某个版本的 Lucene

我下载 的是新版本的




还有一个是推荐的 电子书 不过是英文版的 

我们项目中需要用的ja包


我们先写 个实体类




并填写get set的方法

然后是我们的测试类:、

是我们创建索引操作

我们建好项目  时候是没有这个文件夹的


当我们执行好这个代码后就可以出现这个文件夹 和对应下面的文件了


    @Test
    public void  createIndex() throws IOException{
        Article article=new Article();
        article.setId(1);
        article.setTitle("新闻1");
        article.setContent("新闻内容1");
        Path path= Paths.get("./article/");
        Analyzer analyzer=new StandardAnalyzer();
        IndexWriterConfig indexWriterConfig=new IndexWriterConfig(analyzer);
        indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
        Directory directory= FSDirectory.open(path);
        Document document=new Document();
        document.add(new TextField("title",article.getTitle(), Field.Store.YES));
        document.add(new TextField("id",article.getId().toString(), Field.Store.YES));
        document.add(new TextField("content",article.getContent(), Field.Store.YES));
        IndexWriter indexWriter=new IndexWriter(directory,indexWriterConfig);
        indexWriter.addDocument(document);
        indexWriter.close();
    }


对应导的包:

package cn.Lucene;

import cn.entity.Article;
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;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.ParseException;
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.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

然后我们进行查询的方法

我们上面添加了一个 新闻

下面我们通过新闻的标题来查看新闻

 @Test
    public void search() throws IOException, ParseException {

        Path path=Paths.get("./article/");
        Directory directory=FSDirectory.open(path);
        Analyzer analyzer=new StandardAnalyzer();
        String word="新闻1";
        IndexReader indexReader= DirectoryReader.open(directory);
        IndexSearcher indexSearcher=new IndexSearcher(indexReader);
        QueryParser  queryParser=new QueryParser("title",analyzer);
        Query query=queryParser.parse(word);
        TopDocs topDocs=indexSearcher.search(query,100);
        int count=(int)topDocs.totalHits;
        ScoreDoc[] scoreDocs=topDocs.scoreDocs;

        List<Article> list=new ArrayList<Article>();
        for(int i=0;i<scoreDocs.length;i++){
            ScoreDoc scoreDoc=scoreDocs[i];
            System.out.println("得分"+scoreDoc.score);
            int docid=scoreDoc.doc;
            Document doc=indexSearcher.doc(docid);
            Article article=new Article();
            article.setId(Integer.parseInt(doc.get("id")));
            article.setTitle(doc.get("title"));
            article.setContent(doc.get("content"));
            list.add(article);
        }
        for (Article arit:list){
            System.out.println(arit.getTitle());
            System.out.println(arit.getContent());
        }
    }



我们的单测算是成功完成 !

下一篇是提取工具类

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值