当前标签: 架构设计

C6架构重构 - service-search模块 一(Lucene基础技术探讨)

2014-12-03 12:26:16

请关注唯心的个人微信公众号:craft6-cn(中划线,也可以搜索:领域驱动业务建模)

一、Lucene 系统主要代码结构图

Lucene 代码结构分析图(Craft6.cn 颜超敏).jpg

    为了基于Lucene技术设计service-search模块,重温了Lucene的技术要点和阅读了一下其源码结构,
 制作了该图,方便记忆和使用。


  • Document 和 Field

    Document 类似数据表的一条记录,Field类似该记录的一个字段的值。
    其数据来源一般是DB数据库,即我们在实际使用可以将产品表、帖子表这些数据查询处理,然后遍历构造成

    Document,然后生成Lucene全文索引。

    另外的一种常见数据源则是文件系统,针对不同的文件格式,如PDF、word、text等,但其原理都是通过对应的辅助类从
    文档中将文字内容取出。

  • 索引文件

    • Lucene默认是存储到文件系统或内存中。

    • Compass对其进行了增强,支持存储到数据表中(见JDBCDirectory类),并提供了Data Mirror技术(类似ORM),
      让API的使用更加简化。

  • Directory
    封装索引位置的类,FSDirectory基于文件,RAMDirectory基于内存(如内存足够,系统启动时,就将数据索引化到内存)

  • IndexWriter
    写索引类。基于Directory参数构造,提供addDocument方法往索引文件中添加索引。

  • IndexWriterConfig
    对比2.*版本,新的版本对配置参数进行了封装,方便做IndexWriter的构造。
    其中包括了词法分析器Analyzer。

  • Analyzer 词法分析,分词器

    Lucene的一个重要的接口。提供了多种分词方式,常见的StandardAnalyzer(标准分词),IKAnalyzer(中文分词)。
    这篇文章说得详细,可参考:http://blog.csdn.net/chs_jdmdr/article/details/7359773

  • IndexReader

    对索引文件进行查询、更新和删除操作。

    • 通过本身的静态方法open获得实例。

    • 默认获得DirectoryReader实例,如果设置了只读为真,则返回ReadOnlyDirectoryReader。

  • IndexSearcher

    基于IndexReader实现,专门负责查询的服务。

    • Query:提供多种条件的构造方式。也允许通过QueryParser对查询字符串进行分解直接获得Query实例。

    • Team:封装查询field的名称和值。

    • 查询结果

      • TopDocs:只返回得分最高的指定数量的结果。常用,效率高,对用户有价值。可以设置权重。

      • Hits:返回所有符合条件结果集。

    • 提供了searchAfter方法对分页进行了支持。



可通过扫描左侧二维码阅读本文。本站文章均为颜超敏原创,欢迎转载,请注明出处即可,转载可通过下面的社会化工具快速完成。

分享到:


C6架构重构 - service-search模块 一(Lucene基础技术探讨)

Lucene,全文检索,IndexWriter,IndexReader,Directory,IndexSearch,Analyzer

本文阐述了Lucene的代码结构和基本使用要点。

颜超敏,唯心六艺,Craft6.cn,电子商务博客,电子商务研发,电商研发,电子商务研究,电商研究,电子商务专家,电商专家,电子商务知识,电商知识,电子商务教程,电商教程,电子商务模式,电子商务平台,电子商务商业模式,电子商务数据库设计,电商数据库设计,电子商务系统分析,Java架构设计,Java软件架构,B2C,O2O,o2o模式,o2o电子商务,o2o电子商务平台,中国电子商务,电子商务平台建设方案
粤ICP备14060523号 Copyright @2014 -唯心六艺软件