Spring Data 是Spring全家桶的一部分.Spring Data包装了数据仓库领域的一些api.
Spring Data JPA 是操作Mysql类型的数据库
Spring Data Redis是操作redis的数据库
Spring Data Elasticsearch是用来操作Elasticsearch的,简化了Elasticsearch的api,操作对象一样操作Elasticsearch.
1.Spring Data Elasticsearch怎么操作索引库的?
a.spring配置文件中,配置service和dao包扫描,配置Elasticsearch的连接和模板对象
b.创建pojo,业务实体类
术语 | 对应关系 | Spring Data代码 |
索引 | 数据库 | indexName |
类型 | 表 | type |
文档 | 一个对象对应一条记录 | @Document |
域 | 字段/列 | @Field |
映射 | 域的数据类型:是否索引/是否存储在文档区/是否分词/数据类型 | index,store,type,analyzer |
c.把数据库的表中,要用到的字段映射过来.创建dao接口,继承ElasticsearchRepository<实体类,主键类型>.
d.使用ElasticsearchTemplate创建索引和映射,就可以用dao来做CRUD.也可以自动创建索引库和映射.
2.Elasticsearch为什么设置存储为false.
Elasticsearch在初始存储时,默认就会存储原始文档,一般情况下不设置store,store默认为false
3.Elasticsearch数据是怎么存储的?
Elasticsearch和solr,lucene一样,底层把数据分为两个区域:索引区和文档区,映射store就是标识是否要存储在文档区.Elasticsearch本身就会存储原始文档.但是lucene一定要指定存储.
4.什么情况下给域设置索引?
Elasticsearch的域默认是有索引的.不需要查找的域,设置为index=false.需要查找的域,默认就可以.
5. FieldType.Text和FieldType.Keyword有什么区别?
Text和Keyword都是存储String类型的数据,Text是可以分词的,比如一段介绍;
Keyword是整体,不分词的,比如分类,品牌,商家.
6.Elasticsearch怎么保存文档?
dao继承了ElasticsearchRepository,调用dao的save方法保存一个文档,调用saveAll方法保存多个文档.
7.Elasticsearch能修改文档吗?
只要文档的id一样,就能够修改文档的内容,本质上是删了旧的,加上新的.
8.Elasticsearch怎么查询文档?
查询所有,调用dao的findAll方法,还可以排序和分页.
根据多个id查询多个,调用findAllById
根据单个Id查询一个,调用findById
9.Elasticsearch怎么分页查询?
先调用PageRequest的of方法,创建Pageable对象.
调用dao重载的findAll方法,传一个Pageable对象给方法.返回值是Page对象,包含了所有的分页数据.
Elasticsearch的页码是从0开始的.通用Mapper是从1开始.
10.Elasticsearch怎么实现排序的?
创建一个Sort对象,传参数指定升序或降序,排序的字段,排序字段不能分词,可以是double
11.Elasticsearch怎么实现删除的?
根据条件删除,调用dao的delete方法,传参实体对象
根据集合删除,调用dao的deleteAll方法,传参集合
根据Id删除,调用dao的deleteById,传参id
12.没有dao怎么操作文档?
使用elasticsearchTemplate操作文档
13.elasticsearch怎么用通配符查询?
a.通配符?代表一个任意字符,*代表0个或多个任意字符
b.使用QueryBuilders的wildcardQuery方法创建QueryBuilder对象,把通配符加到查询内容里面.wildcardQuery查询内容不支持分词.
c.使用QueryBuilder对象作为构造参数,创建SearchQuery对象
d.调用elasticsearch的queryForPage方法,查询匹配数据
14.怎么使用分词匹配搜索?
a.使用QueryBuilders的matchQuery方法,创建分词匹配搜索的QueryBuilder对象.
b.使用QueryBuidler对象作为构造参数,创建SearchQuery对象.
c.调用elasticsearch的queryForPage方法,查询匹配的数据
15.分词匹配搜索和不分词匹配搜索有哪些?
QueryBuilders的matchQuery方法创建分词匹配搜索的QueryBuilder对象;
QueryBuilders的termQuery和wildcardQuery方法创建最小搜索单元词条搜索和通配符搜索都是不分词的.
16.怎么使用相似度查询(失真查询)?
elasticsearch的相似度查询的范围在3个字符以内,
使用QueryBuilders的fuzzyBuilder方法,创建QueryBuilder对象.