Skip to content

hlc0110/elasticsearch-house

This branch is up to date with bubblewu/elasticsearch-house:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

7232503 · Oct 29, 2020

History

34 Commits
Nov 1, 2019
Oct 29, 2020
Oct 28, 2020
Oct 28, 2020
Oct 28, 2020
Oct 29, 2020
Oct 28, 2020

Repository files navigation

elasticsearch-house

基于Elasticsearch的租房搜索系统

概述

一、系统架构

主要是以MySQL作为基础数据存储,结合ES实现站内搜索引擎。 img/系统架构.png

二、涉及技术

  • 核心搜索技术: SpringBoot + Elasticsearch(方便实现站内搜索引擎)
  • 站内搜索引擎实现: Elasticsearch + MySQL + Kafka
  • 地图搜索: Elasticsearch + 百度地图
  • 负载均衡,安全加固技术(监控报警): Elasticsearch + Nginx
  • 日志数据分析技术: ELK:Elasticsearch + Logstash + Kibana
  • 数据库: MySQL(其事务特性可做稳定的数据存储) + Spring Data JPA
  • 前端框架: thymeleaf(模版引擎技术,语法更接近HTML) + Bootstrap(前端开发框架) + JQuery
  • 项目安全框架: Spring Security(权限控制、自定义安全策略)
  • 图片上传: 七牛云 + 百度开源框架webUpload
  • 免注册登录: 阿里短信(基于阿里云通讯实现)

项目设计

一、数据库设计

1、ER图

实体-联系图(Entity Relationship Diagram)

  • 用户ER图: img/用户.png

  • 房源信息ER图 img/房源.png

数据库表对象模型

img/数据库表模型.png

2、结构

  • 数据+结构转储sql 见文件:db/elasticsearch_house.sql

二、项目结构

1、结构分层

经典的MVC架构:

  • 1、表示层:web包
  • 2、业务逻辑层:service包
  • 3、数据层:entity包、repository包

2、API结构设计

2.1、RESTFul风格API:

restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。 它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

REST(表现层状态转化),即Representational State Transfer的缩写。 它是一种互联网应用程序的API设计理念:URL定位资源,用HTTP动词(GET,POST,PUT,DELETE)描述操作。

统一资源接口:RESTFul架构应该遵循统一接口原则,统一接口包含了一组受限的预定义的操作,不论什么样的资源,都是通过使用相同的接口进行资源的访问。 接口应该使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义。

  • RESTFul 的基本原理包括:

系统上的一切对象都要抽象为资源;

每个资源对应唯一的资源标识(URI);

对资源的操作不能改变资源标识(URI)本身;

所有的操作都是无状态的等。

2.2、API数据格式标准
  • code:自定义请求状态码:

如`com.bubble.house.base.api.ApiStatus`定义的状态码信息;

  • message:自定义请求响应信息描述: 如:com.bubble.house.base.api.ApiResponse

  • data:当前API请求的目标数据;

2.3、异常拦截器

用于拦截项目运行中的无法预知的情况,通过统一拦截器进行异常拦截。

  • 页面异常拦截器:
  • API异常拦截器:

不让Springboot自动生成whitelabel页面,由我们自定义实现:com.bubble.house.base.api.AppErrorController

# 拦截器配置
server:
  error:
    whitelabel:
      # 进入SpringBoot框架自动生成whitelabel页面
      enabled: false
    path: /error
2.4、功能性页面

功能性页面接口定义:com.bubble.house.web.controller.HomeController

  • 403:权限限制提示页面;
  • 404:NotFound提示页面;
  • 500:服务异常提示页面;
  • logout:登出(注销返回首页)的基本服务页面;

三、 业务和功能设计

1、后台管理模块

提供一个后台管理模块来统一管理租房网站的数据和人员信息。 后台管理中心入口:com.bubble.house.web.controller.admin.AdminController 管理系统参考:H-ui.admin是用H-ui前端框架开发的轻量级网站后台模版 主要功能有:

后台登录:

权限控制:`com.bubble.house.config.WebSecurityConfig`

注销功能:

2、权限控制模块

基于spring-security来实现:com.bubble.house.config.WebSecurityConfig

根据不同的请求,跳转到不同的登录页面。如普通用户跳转user/login,管理员跳转admin/login页面。 参考:`com.bubble.house.config.security`包下的实现

3、房源信息管理模块

主要就是对房源信息的增删查改和审核等功能。

3.1、房源浏览:
3.2、房源编辑:
3.3、房源审核:
3.4、房源图片(基于七牛云):

图片上传,主要基于七牛云和百度的WebUploader:elasticsearch-house/src/main/resources/static/js/admin/upload.js

3.5、房源新增:
3.6、房源排序:
3.7、房源详情页:

4、地图找房模块

5、会员系统模块

6、预约看房模块

四、搜索相关

五、报警监控

六、日志分析

总结

注意事项

1、热部署
  # 热部署
  devtools:
    restart:
      # 热部署生效
      enabled: true
      # 设置重启的目录,添加那个目录的文件需要restart
      additional-paths: src/main/java,src/main/resources
      # 不需实时加载
      exclude: db/** #,static/**
2、thymeleaf页面中文乱码

com.bubble.house.config.WebMVCConfig中配置编码:

    /**
     * 模板资源解析器。
     * ConfigurationProperties 绑定配置文件中thymeleaf的前缀
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.thymeleaf")
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        // 配置Spring上下文
        templateResolver.setApplicationContext(this.applicationContext);
        // 防止中文乱码
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(thymeleafCacheEnable);
        return templateResolver;
    }

About

基于Elasticsearch的租房搜索系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 70.1%
  • HTML 13.6%
  • CSS 9.9%
  • Java 5.6%
  • PLpgSQL 0.6%
  • PHP 0.2%