}
新增数据
Goods goods = new Goods();
goods.setId((long) i);
goods.setGoodsCode(“中国人” + i);
goods.setCreateDate(new Date());
goods.setHotScore(10);
goods.setGoodsName(“我是中国人” + i);
新增
goodsRepository.save(goods);
批量新增
goodsRepository.saveAll(goodsList);
删除数据
根据ID,删除数据
goodsRepository.deleteById(id);
根据对象删除数据,主键ID不能为空
goodsRepository.delete(bean);
根据对象集合,批量删除
goodsRepository.deleteAll(beanList);
删除所有
goodsRepository.deleteAll();
更新数据
Goods goods = new Goods();
goods.setId(id); // ID不能为空
goods.setGoodsCode(“中国人”);
goodsRepository.save(goods);// 根据主键更新 ID不能为空
更新某几个字段
查询
ElasticsearchRestTemplate的基本api
-
SearchQuery 总的查询
-
BoolQueryBuilder bool查询,可在后面加上must,mustNot,should等等
-
MatchQueryBuilder 匹配查询
-
TermQueryBuilder 倒排索引查询
-
HighlightBuilder 高亮查询,用于设置要高亮的field
查询结果
SearchHit
包含以下信息:
-
Id
-
Score
-
Sort Values
-
Highlight fields
-
The retrieved entity of type
SearchHits
包含以下信息:
-
Number of total hits
-
Total hits relation
-
Maximum score
-
A list of
SearchHit<T>
objects -
Returned aggregations
SearchPage
定义一个Spring Data Page
包含一个 SearchHits<T>
元素,可以使用存储库方法进行分页访问
SearchScrollHits
由ElasticsearchRestTemplate
中的底层滚动API函数返回,它用Elasticsearch滚动id充实了SearchHits
。
SearchHitsIterator
由SearchOperations
接口的流函数返回的迭代器。
QueryBuilders提供了大量的静态方法,用于生成各种不同类型的查询:
-
matchQuery:词条匹配,先分词然后在调用termQuery进行匹配
-
TermQuery:词条匹配,不分词
-
wildcardQuery:通配符匹配
-
fuzzyQuery:模糊匹配
-
rangeQuery:范围匹配
-
booleanQuery:布尔查询,组合查询
// 构建查询条件
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
// 添加基本分词查询
queryBuilder.withQuery(QueryBuilders.matchQuery(“title”, “小米手机”));
BooleanQuery(组合查询)
注意点:
BooleanClause用于表示布尔查询子句关系的类,包括:BooleanClause.Occur.MUST,BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.SHOULD。必须包含,不能包含,可以包含三种.有以下6种组合:
1.MUST和MUST:交集。
2.MUST和MUST_NOT:表示查询结果中不能包含MUST_NOT所对应得查询子句的检索结果。
3.SHOULD与MUST_NOT:连用时,功能同MUST和MUST_NOT。
4.SHOULD与MUST连用时,结果为MUST子句的检索结果,但是SHOULD可影响排序。
5.SHOULD与SHOULD:并集。
6.MUST_NOT和MUST_NOT:无意义,检索无结果。
public void testBooleanQuery(){
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
builder.withQuery(QueryBuilders.boolQuery().must(QueryBuilders.termQuery(“title”,“手机”))
.must(QueryBuilders.termQuery(“brand”,“小米”))
);
Page list = this.itemRepository.search(builder.build());
排序
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
// 添加基本分词查询
queryBuilder.withQuery…
// 排序
queryBuilder.withSort(SortBuilders.fieldSort(“price”).order(SortOrder.ASC));
普通查询
可以使用goodsRepository
操作
@Repository
public interface GoodsRepository extends ElasticsearchRepository<Goods, Long> {
long countByGoodsCode(String goodsCode);
long deleteByGoodsCode(String goodsCode);
List removeByGoodsCode(String goodsCode);
List findByGoodsCode(String goodsCode);
Page findByGoodsCode(String goodsCode, Pageable pageable);
Slice findByGoodsCode(String goodsCode, Pageable pageable);
List findByGoodsCode(String goodsCode, Sort sort);
List findFirst10ByGoodsCode(String goodsCode, Pageable pageable);
@Query(“{“bool”: {“must”: [{“match”: {“tags”: “?0”}}]}}”)
Page findFirst10ByGoodsCode(String tag, Pageable pageable);
Page
@Query(“{“bool”: {“must”: [{“match”: {“authors.name”: “?0”}}]}}”)
Page
@Query(“{“bool”: {“must”: {“match_all”: {}}, “filter”: {“term”: {“tags”: “?0” }}}}”)
Page
@Query(“{“bool”: {“must”: {“match”: {“authors.name”: “?0”}}, “filter”: {“term”: {“tags”: “?1” }}}}”)
Page
}
API 接受
Sort
和Pageable
。如果您不想应用任何排序或分页,请使用Sort.unsorted()
和Pageable.unpaged()
,不要传null。
Sort sort = Sort.by(“firstname”).ascending()
.and(Sort.by(“lastname”).descending());
与Elasticsearch 查询字符串映射如下:https://docs.spring.io/spring-data/elasticsearch/docs/4.0.6.RELEASE/reference/html/#elasticsearch.query-methods.criterions
分页查询
Page users = repository.findAll(PageRequest.of(1, 20));
MatchQueryBuilder builder = QueryBuilders.matchQuery(field, value);
SearchQuery searchQuery = new NativeSearchQuery(builder).setPageable(PageRequest.of(0, 100));
AggregatedPage page = restTemplate.queryForPage(searchQuery, EmployeeBean.class);
long totalElements = page.getTotalElements(); // 总记录数
int totalPages = page.getTotalPages(); // 总页数
int pageNumber = page.getPageable().getPageNumber(); // 当前页号
List beanList = page.toList(); // 当前页数据集
Set beanSet = page.toSet(); // 当前页数据集
高亮查询
权重查询
聚合查询
监控管理
ElasticHQ可以作为Docker容器使用。执行以下命令以使用ElasticHQ启动容器:
$ docker run -d --name elastichq -p 5000:5000 elastichq/elasticsearch-hq
问题总结
索引映射创建
方式一 在实体类上加**@Document**,而在这个类中有一个createIndex属性,默认为true,意思是在启动应用时es中还没创建该索引,则进行初始化。
下面是默认创建的索引和映射,很明显里面的映射创建是不对。不建议使用这种方式。
es服务端版本为7.3.0。不知道是不是不完全匹配的原因。试了7.6.2版本也不对哈哈哈。
{
“state”: “open”,
“settings”: {
“index”: {
“refresh_interval”: “1s”,
“number_of_shards”: “1”,
“provided_name”: “goods_index”,
“creation_date”: “1640695057235”,
“store”: {
“type”: “fs”
},
“number_of_replicas”: “0”,
“uuid”: “La3XlrTTTu6-SoNtsuPl1g”,
“version”: {
“created”: “7030099”
}
}
},
“mappings”: {
“_doc”: {
“properties”: {
“hotScore”: {
“type”: “long”
},
“_class”: {
“type”: “text”,
“fields”: {
“keyword”: {
“ignore_above”: 256,
“type”: “keyword”
}
}
},
“goodsCode”: {
“type”: “text”,
“fields”: {
“keyword”: {
“ignore_above”: 256,
“type”: “keyword”
}
}
},
“id”: {
“type”: “long”
},
“goodsName”: {
“type”: “text”,
“fields”: {
“keyword”: {
“ignore_above”: 256,
“type”: “keyword”
}
}
},
“createDate”: {
“type”: “text”,
“fields”: {
“keyword”: {
“ignore_above”: 256,
“type”: “keyword”
}
}
}
}
}
}
方式二 使用postman、elasticsearch-head等提交put请求创建索引和映射。
这个就不用讲了哈,最原始的了。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-iGbQWzso-1711023001695)]
[外链图片转存中…(img-208HoH7U-1711023001697)]
[外链图片转存中…(img-rRnJ28ft-1711023001697)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-dZWCoqUh-1711023001698)]
最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
[外链图片转存中…(img-dDbJbU1p-1711023001699)]
[外链图片转存中…(img-OFjEwj2L-1711023001699)]
[外链图片转存中…(img-hgDeJWYz-1711023001700)]