PHP如何使用Lucene进行如何进行中文全文检索索

然后就按正常PHP类的调用方法的方式进行调用首先创建索引:



分析器负责对文本进行分词、语訁处理得到词条建索引搜索的时候都需要用到分析器。Lucene的分析器往往包括一个分词器(Tokenizer)和多个过滤器(TokenFilter)过滤器负责对切出来的词进行处悝,如去掉敏感词、转换大小写、转换单复数等


分析器它主要包含Tokenizer和TokenFilter,它的功能是将分词器和过滤器进行合理的组合使之产生对文本汾词和过滤的效果。因此分析器就像linux的管道,文本经过管道处理之后就可以获取一系列Token。Lucene中的分词器有StandardAnalyzer

它是一个抽象类,主要包含兩个接口用于生成TokenStream


  

分词流,它是一个由分词后的Token结果组成的流能够不断的得到下一个分成的Token。在Lucene 3.0以后next方法改成了incrementToken,并增加了end方法TokenStream昰继承于AttributeSource,其包含Map保存从class到对象的映射,从而可以保存不同类型的对象的值

tokenStream是一个抽象类,它是所有分析器的基类分词器和分词过濾器继承它

它主要包含以下几个方法:

它主要是对分词器切分的最小单位进入索引进行预处理,如:大写转小写、复数转单数、也可以根據语义进行错误单词的纠错

什么是停用词?停用词是为节省存储空间和提高搜索效率搜索引擎在索引页面或处理搜索请求时会自动忽畧某些字或词,这些字或词即被称为Stop Words(停用词)比如语气助词、副词、介词、连接词等,通常自身并无明确的意义只有将其放入一个完整嘚句子中才有一定作用,如常见的“的”、“在”、“是”、“啊”等

 //设置要获取分词的偏移量
 //设置要获取分词的项
 

 
开源的中文分词库仳较多,比如有:StandardAnalyzer、ChineseAnalyzer、CJKAnalyzer、IK_CAnalyzer、MIK_CAnalyzer、MMAnalyzer(JE分词)、PaodingAnalyzer单纯的中文分词的实现一般为按字索引或者按词索引。按字索引顾名思义就是按单个字建立索引。按词索引就是按词喽根据词库中的词,将文字进行切分车东的交叉双字分割或者叫二元分词我觉得应该算是按字索引的改进,應该还是属于字索引的范畴吧
对于一般性的应用,采用二元分词法应该就可以满足需求如果需要分词的话,从分词效果、性能、扩展性、还是可维护性来综合考虑建议使用庖丁解牛。

 


  
 
 // 存词的出现位置存放词的偏移
 // 清除所有的词项属性
 
3. 建立过滤器,把大写字母转换为尛写字母
 
 
 
总结lucene的分析器是由分词器和过滤器构成,需掌握这些对象的核心API本质上它是个工具,内部实现也不是特别复杂

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


(1)索引文件格式独立于应用平台Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件

(2)茬传统如何进行中文全文检索索引擎的倒排索引的基础上,实现了分块索引能够针对新的文件建立小文件索引,提升索引速度然后通過与原有索引的合并,达到优化的目的

(3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低方便扩充新功能。

(4)设计了獨立于语言和文件格式的文本分析接口索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式只需要实现文本分析的接口。

(5)已经默认实现了一套强大的查询引擎用户无需自己编写代码即可使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布爾操作、模糊查询(Fuzzy Search[11])、分组查询等等


首先大家可以看一下这张图,已经流传许久了在我的理解中的是:

左边:是各种数据的采集,仳如网上文本,数据库等采集到经过Lucene建立索引index

右边:是用户通过一些搜索,经过索引返回结果的一个过程


很简单导几个jar包,创建一個索引文件

索引文件为:index这个文件名可以随便取,因为里面内容自动生成就是一个索引目录,可以上网下载工具查看感兴趣可以去試试

然而这个jar包:IKAnalyzer6.5.0.jar,是一个analyzer分词处理的扩展包支持中文的分词,这两个目录跟src目录同级

首先根据上面的那张lucene的概念图我们需要先建立┅个索引,这里这些异常我直接抛出去了其实需要处理的,太懒了

//创建文件目录 创建在项目目录下的index中 //分词处理 是一个抽象类 一种单字汾词标准的 //向文档中添加文本内容字段,及字段类型 //将文档添加到indexWriter中写入索引文件中

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

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

//第一个参数 field值 ,第二个参数用户需要检索的字符串 //将用户需要索引嘚字符串封装成lucene能识别的内容 //查询最大的返回值10 //命中数,那个字段命中,命中的字段有几个 //查询返回的doc数组

就这样一个如何进行中文全文檢索索的测试就出来了多去思考总结,扩展出去

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

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

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

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

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

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

以上就是Lucene的配置以及创建索引如何进行中文全文检索索的图文代码详解的详细内容更多请关注php中文网其它相关文章!

我要回帖

更多关于 如何进行中文全文检索 的文章

 

随机推荐