Git Product home page Git Product logo

elasticsearch-house's Introduction

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;
    }

elasticsearch-house's People

Contributors

bubblewu avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

bestjex hlc0110

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.