产品介绍
Elastic CMS是一款NoSql 实现的java CMS系统。基于多个优秀的开源项目高度整合封装而成的高效,稳定的,高性能, 强安全性,易于学习和使用的 Java EE快速建站及开发平台。包括优秀的分布式搜索引擎 Elasticsearch(下面简称es)。 使用分布式搜索引擎来做CMS系统是开创国内优秀java CMS的先锋。但凡接触使用过es,都会知道他的强大特性, 也是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。及重要特性说明 在后续的内容说明。
演示地址:
cms管理平台 http://jubang.red/escms/
用户 thickgemrick 密码 admin
前台系统: http://jubang.red/escms/f/home
联系我: qq 85863711
话不多说,先上个图观摩下
从上图可以看出,整体结构软件结构包含 nginx 数据库, 分布式搜索引擎es,cms系统,业务系统。 现在简要说下他们之前的关系
- 1、关系数据库用来存储我们的 权限系统和cms内容.
- 2、分布式搜索引擎es存储cms内容,可以通过自定义(freemarker)指令从es引擎里面读取内容数据 ,强大而灵活的自定义指令是 Elastic CMS 和其他cms系统不一样的地方, 也是最能体现我们这个cms系统先进性的地方。惊艳的自定义指令后续详细介绍。
- 3、cms管理了由 nginx代理的静态资源(css,js,图片),实现动静分离。
- 4、cms管理了被业务系统使用的freemarker模板,相当于我们传统的jsp页面。
从事过cms开发或使用过cms的人可能对cms有过一定的了解,cms系统叫内容管理系统, 内容内容,那什么是网站的内容呢,网站的内容应该包括如下几部分
- 1是我们的静态资源比如 css文件,js文件,图片文件。通过管理界面管理这些文件,这样就无需专业的发布人员 登录到服务器上做此类文件的发布,提升网站的灵活性。
- 2栏目管理,我们知道一个网站由多个栏目组成,栏目一般分类普通栏目和内容栏目,比如网站的首页,活动页,专区页 都是普通栏目,一篇新闻,一篇博客,一个商品详情,一个公告 这些页面应该是内容页面,因为这些都对应一个内容对象 有多个属性,比如标题,时间,图片,内容等等。
- 3模型管理,上面我们提到了内容对象,有内容对象就得有对应的模型,传统做法是 设计一个关系型表,然后实现对这个表 的增删改查,从而达到对内容数据的管理。而cms系统里面不能这样做,需要定义一个模型,通过管理平台配置一个模型, 我们称之为动态模型,通过动态模型生成可以录入内容数据的动态表单。动态模型,动态表单也是Elastic CMS 闪亮的地方, 一会使用的过程能体会到。
- 4是我们的模板,大家都知道jsp,我们开发一个页面就编写一个jsp页面,但在cms系统里面是叫模板,模板也是一个文本文件 ,只是这类文件可以被视图解析器解释。可以通过后台管理界面配置的。难的是模板文件里面使用的自定义指令,通过自定义 指令灵活、高效读取我们的内容数据。
- 5是内容管理(内容可能是一个广告,一个活动,一个地址信息,一个商品等等),cms里面的内容都是先要定义数据模型, 根据数据模型生成动态表单,通过动态表单录入我们的内容数据。大家用的cms系统,一般内容数据存储在关系数据库的多个表里面, 是不容易读取的,读取到了不使用缓存的话性能也是比较差的。而我们通过es很好解决这个问题
这几点是cms系统真正核心的东西我们经常在网上看到一些cms系统介绍,文章管理,回复管理,新闻管理 想想这些都是伪cms, 因为cms根本不是干这类活的。甚至都看不到他们的动态表单,自定义指令。这些系统应该叫新闻系统,博客系统,文章管理系统。 cms系统并不是能把整个网站配置出来,除非网站的业务非常简单,cms系统应该结合业务系统,为业务系统提供内容服务, 核心的业务功能应该由业务系统来完成,cms系统只是辅助业务系统,简化业务系统。
Elasticsearch特性说明
cluster(集群)
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的, 主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点, 这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体, 你与任何一个节点的通信和与整个es集群通信是等价的。
shards(分片)
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个, 分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replicas (复制集)
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性, 当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率, es会自动对搜索请求进行负载均衡。
recovery(自动恢复)
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配, 挂掉的节点重新启动时也会进行数据恢复。
discovery.zen(自动发现)
代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点, 再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。
技术选型
1、后端
- 核心框架:Spring Framework 4.1
- 分布式搜索引擎:Elasticsearch2.1
- 模板引擎:Freemarker2.3.20
- 安全框架:Apache Shiro 1.2
- 视图框架:Spring MVC 4.1
- 服务端验证:Hibernate Validator 5.2
- 布局框架:SiteMesh 2.4
- 任务调度:Spring Task 4.1
- 持久层框架:MyBatis 3.2
- 数据库连接池:Alibaba Druid 1.0
- 缓存框架:Ehcache 2.6、Redis
- 日志管理:SLF4J 1.7、Log4j
- 二维码:Google zxing
- 工具类:Apache Commons、Jackson 2.2、Xstream 1.4、Dozer 5.3、POI 3.9
2、前端
- JS框架:jQuery 1.9。
- CSS框架:Twitter Bootstrap 2.3.1(稳定是后台,UI方面根据需求自己升级改造吧)。
- 客户端验证:JQuery Validation Plugin 1.11。
- 富文本在线编辑:CKEditor
- 在线文件管理:CKFinder
- 动态页签:Jerichotab
- 手机端框架:Jingle
- 数据表格:jqGrid
- 对话框:jQuery jBox
- 下拉选择框:jQuery Select2
- 文件上传工具:swfupload
- 树结构控件:jQuery zTree
- 日期控件: My97DatePicker
产品功能
- 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
- 机构管理:配置系统组织机构(公司、部门、小组),树结构展现,可随意调整上下级。
- 区域管理:系统城市区域模型,如:国家、省市、地市、区县的维护。
- 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
- 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
- 字典管理:对系统中经常使用的一些较为固定的数据进行维护,如:是否、男女、类别、级别等。
- 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
- 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
- CMS资源管理:实现静态资源(css,js,image)的界面化管理,并交由nginx进行代理访问。
- CMS模板管理:freemarker 模板的界面化管理,新增,删除,编辑,重命名。
- CMS栏目管理:定义站点的栏目,映射栏目对应的模板。
- CMS动态模型:自定义模型,及模型表单元素。
- CMS内容管理:根据动态模型生成动态表单,通过动态表单录入内容数据。
运行环境
服务器中间件:在Java EE 5规范(Servlet 2.5、JSP 2.1)下开发,支持应用服务器中间件 有Tomcat 6+、Jboss 7+。 数据库支持:目前仅提供MySql数据库的支持,但不限于数据库,平台留有其它数据库支持接口, 你可以很方便的更改为其它数据库,如:Oracle 等 开发环境:Java、Eclipse Java EE 4.3、Maven 3.1、Git
指令使用
1、cms_channel 指令---获取单个栏目信息
输出结果
栏目id | 栏目名称 | 访问路径 | 栏目模板 | 栏目标题 | 序号 |
---|---|---|---|---|---|
通过ID获取单个栏目 | |||||
35 | 首页 | home | /iweb/index/home.html | elastics cms 只做国内最优秀的cms系统 | 1 |
2、cms_channel_list 通过ids属性获取多个栏目
输出结果
栏目id | 栏目名称 | 访问路径 | 栏目模板 | 栏目标题 | 序号 |
---|---|---|---|---|---|
35 | 首页 | home | /iweb/index/home.html | elastics cms 只做国内最优秀的cms系统 | 1 |
3、cms_channel_list 通过parentId属性某个栏目下的子栏目
输出结果
栏目id | 栏目名称 | 访问路径 | 栏目模板 | 栏目标题 | 序号 |
---|
4、ea_content_list 内容指令使用
ea_content_list 指令获取内容数据,包含如下参数
- indexName: 栏目ID
- type : 模型ID
- q :查询条件
- filter : 过滤条件(json string)
- size : 获取数据量 (int)
- from :从第几条开始查询
- sort :排序字段
序号 | 指令查询说明 | 指令内容 | 预览数据 |
---|---|---|---|
1 All查询 | 查询“家用电器”模型下的全部数据,按价格降序排列 | 预览页面 | |
2 In查询 | 查询“家用电器”模型下销售城市为深圳或者广州的商品,按价格降序排列 | 预览页面 | |
3 like查询 | like查询“家用电器”模型下名称包含“海尔”商品,按价格降序排列 | 预览页面 | |
4 等于查询 | 查询“家用电器”模型下类型为冰箱的商品,按价格降序排列 | 预览页面 | |
5 大于查询 | 查询“家用电器”模型下价格大于2000的商品,按价格降序排列 | 预览页面 | |
6 小于查询 | 查询“家用电器”模型下价格小于2000的商品,按价格降序排列 | 预览页面 | |
7 范围查询 | 查询“家用电器”模型下价格大于2000小于4000的商品,按价格降序排列 | 预览页面 | |
8 主键查询 | 根据商品id查询多个商品,按价格降序排列 | 预览页面 | |
9 复合查询 | 查询商品价格从2000到4000并且类型为电视或洗衣机,按价格降序排列 | 预览页面 | |
10 日期范围查询 | 查询商品发布日期从九月前到现在商品,按价格降序排列 | 预览页面 |