阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Lucene的配置及创建索引全文检索

122次阅读
没有评论

共计 3699 个字符,预计需要花费 10 分钟才能阅读完成。

Lucene


是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene 的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

优点


 

(1)索引文件格式独立于应用平台。Lucene 定义了一套以 8 位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
(2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。
(3)优秀的面向对象的系统架构,使得对于 Lucene 扩展的学习难度降低,方便扩充新功能。
(4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受 Token 流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。
(5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即可使系统可获得强大的查询能力,Lucene 的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search[11])、分组查询等等。

概念


 

首先大家可以看一下这张图,已经流传许久了,在我的理解中的是:
 
左边:是各种数据的采集,比如网上,文本,数据库等,采集到经过 Lucene 建立索引 index
右边:是用户通过一些搜索,经过索引,返回结果的一个过程
 
Lucene 的配置及创建索引全文检索

 

Lucene 配置


 

很简单导几个 jar 包,创建一个索引文件
我用的是最新版本的 6.6.0 的核心包:lucene-core-6.6.0.jar,可以上官网下载 http://lucene.apache.org/,这一个包就够你测试用了
索引文件为:index,这个文件名可以随便取,因为里面内容自动生成,就是一个索引目录,可以上网下载工具查看,感兴趣可以去试试
然而这个 jar 包:IKAnalyzer6.5.0.jar,是一个 analyzer 分词处理的扩展包,支持中文的分词,这两个目录跟 src 目录同级
Lucene 的配置及创建索引全文检索
 
不多说先上代码:
首先根据上面的那张 lucene 的概念图,我们需要先建立一个索引,这里这些异常我直接抛出去了,其实需要处理的,太懒了
public static void createindex() throws Exception {// 创建文件目录    创建在项目目录下的 index 中 
        Directory dir=FSDirectory.open(FileSystems.getDefault().getPath(System.getProperty("user.dir")+"/index"));
        // 分词处理         是一个抽象类 一种单字分词,标准的 
        Analyzer analyzer=new IKAnalyzer();
        // 创建 IndexWriterConfig 对象 
        IndexWriterConfig config=new IndexWriterConfig(analyzer);
        // 创建 IndexWriter 对象 
        IndexWriter iWriter=new IndexWriter(dir, config);
        // 清除之前的索引 
        iWriter.deleteAll();
                // 创建文档对象 
        Document doc=new Document();
        // 向文档中添加文本内容字段,及字段类型 
        doc.add(new Field("fieldname","坚持到底 gl 博主的博文,转载请注释出处", TextField.TYPE_STORED));
        // 将文档添加到 indexWriter 中,写入索引文件中 
        iWriter.addDocument(doc);
                // 关闭写入    
                iWriter.close();}

这样运行可以看到你的索引 index 中的内容文件已经创建出来了

索引已经创建,接下来查询一下试试索引,传入需要查询的词

public static void search(String string) throws Exception {Directory dir=FSDirectory.open(FileSystems.getDefault().getPath(System.getProperty("user.dir")+"/search"));
        // 打开索引目录的 
        DirectoryReader dReader=DirectoryReader.open(dir);
        IndexSearcher searcher=new IndexSearcher(dReader);
        // 第一个参数 field 值,第二个参数用户需要检索的字符串 
        Term t=new Term("fieldname",string);
        // 将用户需要索引的字符串封装成 lucene 能识别的内容 
        Query query=new TermQuery(t);
        // 查询,最大的返回值 10
        TopDocs top=searcher.search(query, 10);
                // 命中数, 那个字段命中,命中的字段有几个 
        System.out.println("命中数:"+top.totalHits);
               // 查询返回的 doc 数组 
        ScoreDoc[]    sDocs= top.scoreDocs;   
            for (ScoreDoc scoreDoc : sDocs) {// 输出命中字段内容 
        System.out.println(searcher.doc(scoreDoc.doc).get(field));
}
}

就这样一个全文检索的测试就出来了,多去思考总结,扩展出去

再给添加一个代码有益于理解

public static void main(String[] args) throws Exception {String chString="坚持到底的文章,转载请注释出处";
        Analyzer analyzer=new IKAnalyzer();
        TokenStream stream=analyzer.tokenStream("word", chString);
        stream.reset();
        CharTermAttribute cta=stream.addAttribute(CharTermAttribute.class);
        while (stream.incrementToken()) {System.out.println(cta.toString());
        }
        stream.close();}

显示如下:

Lucene 的配置及创建索引全文检索

还可以添加这几个文件,有一点需要注意的是,注意你的编码格式

第一个:ext.dic 扩展词典,分词中那个需要组在一起的,如:分词处理可能将“坚持到底”四个字分为“坚持”和“到底”,可以在这个文件中直接添加坚持到底,就可以显示出坚持到底的这个索引

第三个:stopword.dic 扩展停止词典,分词中不想出现的,不希望他被分开出现或单独的,可以往里面写,检索的时候就不会有

第二个:是指定上面两个扩展词典的

Lucene 的配置及创建索引全文检索

这些就是最基本掌握的内容,还有很多分词算法等类型,需要去扩展

————————————– 分割线 ————————————–

基于 Lucene 多索引进行索引和搜索 http://www.linuxidc.com/Linux/2012-05/59757.htm

Lucene 实战 (第 2 版) 中文版 配套源代码 http://www.linuxidc.com/Linux/2013-10/91055.htm

Lucene 实战 (第 2 版) PDF 高清中文版 http://www.linuxidc.com/Linux/2013-10/91052.htm

使用 Lucene-Spatial 实现集成地理位置的全文检索 http://www.linuxidc.com/Linux/2012-02/53117.htm

Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a9 http://www.linuxidc.com/Linux/2012-02/53113.htm

Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a8 http://www.linuxidc.com/Linux/2012-02/53111.htm

Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a7 http://www.linuxidc.com/Linux/2012-02/53110.htm

Project 2-1: 配置 Lucene, 建立 WEB 查询系统 [Ubuntu 10.10] http://www.linuxidc.com/Linux/2010-11/30103.htm

————————————– 分割线 ————————————–

Lucene 的详细介绍 :请点这里
Lucene 的下载地址 :请点这里 

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-09/146773.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计3699字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中