Luncene2.0+Heritrix开发自己的搜索引擎 泛读一

    今儿,多喝了几扎,所以更新晚了,废话少说。我看书看资料习惯泛读后精读再精读,所以现在先把泛读所感记下。如果路人,请别见笑!
    
    本人对搜索引擎的学习是从lucene2.0开始,所以谈谈对lucene暂时了解部分的感悟。
   
    搜索引擎呢,据我所领悟的就是抓取数据(存储、索引、分词)、读取数据(根据不同需求读取或者说分析用户的需求获取数据)。抓取数据就是对数据的采集,包括Sting,二进制byte[],inputStream等等,将搜集的数据存储为segments,一个索引可以分为多个segment,但只会生成一个segments文件,而会生成多个其他文件,但是按照一定规则前缀命名。其中需要注意的就是每次重新更新索引都会对所有索引进行更新,所以如果但服务器的话对特别影响性能(当然以一般都是分布式,小弟再研究完lucene后会研究hadoop);再生成索引后,会生成搜索文档内部的id(便于管理,包括以后的hits等等都是用的内部编号)。读取数据,说白了就是查询,包括根据不同的term词条,短语,多词条,模糊,逻辑等等,当然这些都是api级别的查询,熟练程度而已,技术就是一张纸,需要领悟的是道。
   
    貌似这样就可以得到了想要的一些东西,当然这是最小儿科的,其中提到了过滤器(索引级的)。当然这些可以对检查结果进行过滤,但是不提倡,因为毕竟是索引级的,需要对索引进行遍历,性能上不允许。另外需要的提到的是,文中提到了多线程查询,据编者话是由于插件未考虑线程池的原因造成多线程访问比单线程访问更消耗性能,有点本人继续研究,呵呵。

    另外就是排序,分词等,排序用到了sort,sortfield等等,其实换汤不换换药,sortfield就是为了实现sort,呵呵。需要注意的是如果根据多个字段sort的话,可能会按照某个字段排序的前提下再遵守另一个字段排序;分词呢就索引或者访问的内容都需要一个分析器(包括分词器和过滤器),分词一般来说,就是对短语或者文本进行合理拆分,中文不想英文呢那样每个单词之间都有空格分割,所以中文一般的分词方式都是有一个词库来影射,这样达到分词效果。过滤器一般是对一些敏感文字或者需要转义的词语进行顾虑。总的来说分析器是索引和检索都依赖的部分,可以说che core of a search engine
 
   当然这其中不仅包括对txt的读取,还包括对pdf,excel,word的资源的获取,这些一般的程序员应该都知道怎么解析吧,不再赘述。

   下面简述一下流程:

    搜索引擎定期对要获取的资源进行分类(索引,存储,分词(依赖分析器)等),在用户获取自己想要的数据时搜索引擎对关键词进行分析(依赖分析器),返回用户想要的结果(还可以再结果中查找),当然这其中可以扩展一些cache,数据库等方面提升性能的方案。
   
    虽然我写点太白话,太没有“数据”,但是请大家记住读书也是读里面的“道”,希望第一博能是一个好的开始!
  

猜你喜欢

转载自awenhaowenchao.iteye.com/blog/711149