基于 elasticsearch 实现的 国内最优秀的 CMS系统
2022-07-28 15:28:32
235
{{single.collect_count}}

产品介绍

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

产品功能

  1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
  2. 机构管理:配置系统组织机构(公司、部门、小组),树结构展现,可随意调整上下级。
  3. 区域管理:系统城市区域模型,如:国家、省市、地市、区县的维护。
  4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
  5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
  6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护,如:是否、男女、类别、级别等。
  7. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
  8. 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
  9. CMS资源管理:实现静态资源(css,js,image)的界面化管理,并交由nginx进行代理访问。
  10. CMS模板管理:freemarker 模板的界面化管理,新增,删除,编辑,重命名。
  11. CMS栏目管理:定义站点的栏目,映射栏目对应的模板。
  12. CMS动态模型:自定义模型,及模型表单元素。
  13. 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 指令---获取单个栏目信息

31171235_emit.jpg

输出结果

栏目id栏目名称访问路径栏目模板栏目标题序号
通过ID获取单个栏目
35首页home/iweb/index/home.htmlelastics cms 只做国内最优秀的cms系统1

2、cms_channel_list 通过ids属性获取多个栏目

31171237_OGVC.jpg

输出结果

栏目id栏目名称访问路径栏目模板栏目标题序号
35首页home/iweb/index/home.htmlelastics cms 只做国内最优秀的cms系统1

3、cms_channel_list 通过parentId属性某个栏目下的子栏目

31171239_bCaq.jpg

输出结果

栏目id栏目名称访问路径栏目模板栏目标题序号

4、ea_content_list 内容指令使用

ea_content_list 指令获取内容数据,包含如下参数

  1. indexName: 栏目ID
  2. type : 模型ID
  3. q :查询条件
  4. filter : 过滤条件(json string)
  5. size : 获取数据量 (int)
  6. from :从第几条开始查询
  7. sort :排序字段
序号指令查询说明指令内容预览数据
1 All查询查询“家用电器”模型下的全部数据,按价格降序排列31171240_o6JO.jpg预览页面
2 In查询查询“家用电器”模型下销售城市为深圳或者广州的商品,按价格降序排列31171242_1I2r.jpg预览页面
3 like查询like查询“家用电器”模型下名称包含“海尔”商品,按价格降序排列31171245_hHw4.jpg预览页面
4 等于查询查询“家用电器”模型下类型为冰箱的商品,按价格降序排列31171247_cbFx.jpg预览页面
5 大于查询查询“家用电器”模型下价格大于2000的商品,按价格降序排列31171250_GS9M.jpg预览页面
6 小于查询查询“家用电器”模型下价格小于2000的商品,按价格降序排列31171252_7tMo.jpg预览页面
7 范围查询查询“家用电器”模型下价格大于2000小于4000的商品,按价格降序排列31171254_nSKL.jpg预览页面
8 主键查询根据商品id查询多个商品,按价格降序排列31171256_EO4J.jpg预览页面
9 复合查询查询商品价格从2000到4000并且类型为电视或洗衣机,按价格降序排列31171258_rv2j.jpg预览页面
10 日期范围查询查询商品发布日期从九月前到现在商品,按价格降序排列31171302_FES3.jpg预览页面

转载于:https://my.oschina.net/zengtao/blog/1527071

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}