如果是问数据库设计这块,完全可以说这块没有做过,因为任何一家公司都有数据库DB来设计表结构,根据当前业务,合理设计表结构也是可以提升操作效率的。
实际设计中,很少会把主外键、中间表给填上,只是逻辑上是一对多、多对多的关系。其实,也考虑到了扩展性,避免业务更换时带来的麻烦。
数据库查询语句优化:
SpringDataJpa使用的面向对象的查询语句的名字就叫 jpql,两者是一个东西。Hibernate用的是hql。
学习目标
了解其特点与体系架构
熟悉操作方式,具体操作es有三种方式:
使用logstash完成 mysql 与 ES的同步工作,因为这些数据都是来源与数据库。
使用 IK分词器进行分词
完成ES 在 docker 上的安装
注意
面试注意要知道每个技术是干啥用的,比如Head插件是一个操作es的图形化界面;SpringDataElasticSearch是一个通过java操作es的技术。IK是分词器;logstash是一个用于同步es和数据库数据的工具。
在百度上搜索某一字条,是从百度的索引库中查询数据,这些数据是百度通过爬虫手段,从网上爬到的,将这些数据(标题、简介、爬虫来源:网址、图片等)存入百度的索引库中。
收集的资源来源:
这两种收集方式分别代表搜索中的哪两类:搜索引擎搜索、站内搜索
面试题:搜索分为几类?
重点内容:站内搜索
Elasticsearch是一个实时的分布式搜索和分析引擎
sola不支持分布式,需要借助插件进而支持分布式
特点
体系结构
Elasticsearch与关系型数据库Mysql 的对应关系
索引(index) ----数据库(databases)
类型(type)---- 表(table)
文档(document) ------行(row)
主键只有一个索引,并且是自带索引,不是我创建的
从事编程这一行,虽然不一定都要会,但是要清楚到哪里找资料。
查询操作是在数据浏览中: 选中一个数据库,就是查询该数据库所有数据,选中两个,就是查询两个数据库的所有数据。
想看数据详情,就点击对应的文档。
增删改操作是在复合查询中。
提供了两种分词算法 ik_smart 和 ik_max_word
ik_smart: 表示最少切分;
ik_max_word:表示最细粒度切分(分词更多,比如中国人 可以分为中国人 和中国 而最少切分 直接分为中国人即可)
添加定制词汇时,要注意加一个空格
注意: 搜索是到索引库里查,而不是连接数据库查询。
java连接 ElasticSearch 使用的端口号是 9300
数据库中的最小单位是文档,就是一条记录。所以在 实体类上要加 @Document 注解
@Document(indexName = “”, type = “”): indexName 表示数据库的名称; type 表示数据库表的名称。
Field: 域,对应数据库中的列。
index = true 表示该列是索引
@Fiel(index = true)
@Field(index= true ,analyzer=“ik_max_word”, searchAnalyzer= “ik_max_word” )
面试题: 某列是否是索引,有什么区别?索引是怎么找 不是索引怎么找
是否索引 就是看该域是否能被搜索。
是否分词 就是表示是整体匹配还是分词。
是否存储 就是是否在页面上显示。
Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集 起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。
注意:-f 是在后面跟一个文件; -e是后面跟一个语句
ctrl + c : 退出 logstash 登录
logstash ‐e/f 'input { stdin { } } output { stdout {} }'
mysql-conf 是 MySQL数据库和 ElasticSearch 同步的模板文件。
1.下载镜像
docker pull elasticsearch:5.6.8
2.创建容器
docker run ‐di ‐‐name=tensquare_elasticsearch ‐p 9200:9200 ‐p 9300:9300 elasticsearch:5.6.8
让容器中 9300 端口库用
进入 es容器里面: exec
docker exec -it tensquare_elasticsearch(容器的名称) /bin/bash(内存中运行的路径)
ElasticSearch 和 Solr 搜索用的索引是倒排索引,即一个词条对应一个文档。两者的区别在于:前者适合用于实时搜索应用,后者不适合,创建索引时会产生 io 阻塞。后者也比前者更成熟。
轮子效应,即代码可重用。
答:以 bound开头的方法一般用于对缓存中的数据进行修改、删除或者进行逻辑的查询,而前者是用于存和取数据。
redis作为缓存数据库,结构是key value;
mongdb是非关系型数据库中,最像关系型数据库的,一般用于存储。前者是作为缓存用。