文档章节

基于 elasticsearch 实现的 国内最优秀的 CMS系统

曾涛1983
 曾涛1983
发布于 2017/08/31 17:07
字数 3003
阅读 205
收藏 1

产品介绍

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 指令---获取单个栏目信息

输出结果

栏目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 指令获取内容数据,包含如下参数

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

© 著作权归作者所有

曾涛1983
粉丝 0
博文 1
码字总数 3003
作品 0
大连
私信 提问
【开源访谈】Elastic 曾勇:我与 Elasticsearch 的共同成长之路

Elasticsearch 由于其简单易用且能够解决实际的问题,从最开始的分布式搜索引擎到如今遍地开花的各种应用场景,Elasticsearch 正成为大数据分析的热门工具。Elasticsearch 是如何在国内发展起...

达尔文
2017/05/23
4.6K
12
Elastic Search 上市了,市值翻倍,这群人财务自由了!

国庆长假,大部分人还深浸在风花雪月之中,而就在昨天(美国时间10月5号),我们 Java 程序员所熟知的大名鼎鼎的 Elastic Search 居然在美国纽约证券交易所上市了! 当说到搜索时,大部分人可...

Java技术栈
2018/10/07
0
0
Elastic 南京 Meetup

1. 主办方 Elastic中文社区 趋势科技 2. 时间地点 活动时间:2018年6月30日 13:00 - 18:00 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站) 3. 报名地...

Medcl
2018/06/04
129
0
一篇文章让你读懂ELK在CDN质量监控中的价值

一篇文章让你读懂ELK在CDN质量监控中的价值 灵活调配ELK,适应大数据场景 数说事实 在开篇之前,先简单的列举下我们线上ELK的真实数据。目前自建的ELK集群主要接入了自建CDN的日志,以及多个...

Yennis
2016/10/31
322
0
Elastic 深圳Meetup

Elastic中文社区联合vivo互联网和腾讯云+社区,将于2019年4月20日,在深圳举办本年度首次线下技术交流活动。 本次活动的交流内容主要围绕Elastic的开源产品(Elasticsearch、Logstash、Kiban...

vivo互联网技术
04/09
71
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.7K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部