1、脚本控制es
- es的crud
# 创建索引
PUT /test01
# 查询索引 结构
GET /test01
# 删除索引
DELETE /test01
# 创建类型
PUT /test1
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"content":{
"type": "text"
},
"price":{
"type": "double"
}
}
}
}
# 插入数据
POST /test1/_doc/2
{
"name":"奥里给",
"content":"6786899",
"price":66.6
}
# 如果id相同 则是修改操作
POST /test1/_doc/1
{
"name":"小李",
"content":"45555",
"price":22.6
}
# 查询索引 数据
GET /test1/_search
# 删除id为2的数据
DELETE /test1/_doc/2
1.1、查询所有
GET /test1/_search
{
"query": {
"match_all": {}
}
}
1.2、模糊查询
GET /test1/_search
{
"query": {
"match": {
"name": "小"
}
}
}
1.3、精确查询
GET /test1/_search
{
"query": {
"term": {
"price": "66.6"
}
}
}
1.4、区间查询
GET /test1/_search
{
"query": {
"range": {
"price": {
"gte": 44,
"lte": 70
}
}
}
}
1.5、多条件组合查询
- 查询name中包含“小”的和44<=price<=70的
GET /test1/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "小"
}
},
{
"range": {
"price": {
"gte": 44,
"lte": 70
}
}
}
]
}
}
}
1.6、分页查询
- from:起始位置,size:分页单位,sort:排序
GET /test1/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "小"
}
},
{
"range": {
"price": {
"gte": 20,
"lte": 70
}
}
}
]
}
},
"from": 0,
"size": 3,
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
1.7、高亮查询
GET /test1/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "小"
}
},
{
"range": {
"price": {
"gte": 44,
"lte": 70
}
}
}
]
}
},
"highlight": {
"fields": {
"name": {
"pre_tags": "<font color='red'>",
"post_tags": "</font>"
}
}
}
}
1.8、使用分词器查询
- 验证分词器(对中文不太友好,得指定分词器)
- 倒排索引 根据id找内容
- 正排索引 根据关键词内容找id
- 最小分词
POST /_analyze
{
"analyzer": "ik_smart",
"text":"饼干好吃"
}
- 最大分词
POST /_analyze
{
"analyzer": "ik_max_word",
"text":"饼干好吃"
}
2、java控制es
2.1、全量同步到es(原生写法)
- 使用集成spring boot的 elasticsearchRestTemplate 方法
List<Emp> list = empService.list();
// 创建索引 将数据库中的数据全量同步到es
ArrayList<IndexQuery> indexQueries = new ArrayList<>();
for (Emp emp : list) {
IndexQuery indexQuery = new IndexQueryBuilder()
.withId(emp.getId()+"")
.withObject(emp)
.build();
indexQueries.add(indexQuery);
}
elasticsearchRestTemplate.bulkIndex(indexQueries, Emp.class);
2.2、全量同步到es(简易写法)
- 使用es官方提供的 CrudRepository 方法
- 自定义一个接口,继承这个方法
package com.llh.repository;
import com.llh.domain.Emp;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
/**
* User: lilinhan
* DateTime: 2023/9/19 20:09
*/
@Repository
public interface EmpRepository extends CrudRepository<Emp,Integer> {
}
- 测试类使用
// 同步(全量同步+增量同步)
@Autowired
EmpRepository empRepository;
List<Emp> list = empService.list();
empRepository.saveAll(list);
2.3、查询所有
NativeSearchQuery query = new NativeSearchQueryBuilder().build();
SearchHits<Emp> search = elasticsearchRestTemplate.search(query, Emp.class);
// 总条数
long totalHits = search.getTotalHits();
// 数据展示
System.out.println("总条数:"+totalHits);
List<Emp> list = new ArrayList<>();
List<SearchHit<Emp>> searchHits = search.getSearchHits();
for (SearchHit<Emp> searchHit : searchHits) {
Emp emp = searchHit.getContent();
list.add(emp);
}
for (Emp emp : list) {
System.out.println(emp);
}
2.4、模糊查询
- 查询姓名中包含“子”的数据
String name = "子";
MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("ename", name);
NativeSearchQuery query = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.build();
SearchHits<Emp> search = elasticsearchRestTemplate.search(query, Emp.class);
2.5、精确查询
- 查询 id=5 的数据
TermQueryBuilder queryBuilder = QueryBuilders.termQuery("id", 5);
NativeSearchQuery query = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
SearchHits<Emp> search = elasticsearchRestTemplate.search(query, Emp.class);
2.6、多条件组合查询(区间+模糊)
- 查询 id=5 并且 name 中包含“子”的数据
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
// 区间
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("id");
rangeQuery.gt(2);
rangeQuery.lt(10);
// 模糊
String name = "子";
MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("ename", name);
// must==and should==or
boolQuery.must(rangeQuery);
boolQuery.must(matchQuery);
NativeSearchQuery query = new NativeSearchQueryBuilder()
.withQuery(boolQuery)
.build();
SearchHits<Emp> search = elasticsearchRestTemplate.search(query, Emp.class);
2.7、分页查询
- 根据id正序排序,展示第1页,每页显示5条数据
String gender = "0";
QueryBuilders.regexpQuery("gender",gender);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
Pageable pageable = PageRequest.of(0,5, Sort.Direction.ASC,"id");
NativeSearchQuery query = new NativeSearchQueryBuilder()
.withQuery(boolQueryBuilder)
.withPageable(pageable)
.build();
SearchHits<Emp> search = elasticsearchRestTemplate.search(query, Emp.class);
38 comments
暴走财神6
?文化类评语?
价值导向积极,彰显社会责任意识。
案例丰富,数据详实,论证扎实可信。
对传统与现代的融合思考颇具启发性。
文章紧扣主题,观点鲜明,展现出深刻的思考维度。
作者的才华横溢,让这篇文章成为了一篇不可多得的艺术品。
文章紧扣主题,观点鲜明,展现出深刻的思考维度。
这篇文章提供了宝贵的经验和见解,对读者有很大的启发和帮助。
部分语句稍显冗长,可精简以增强节奏感。
文章中的实用建议和操作指南,让读者受益匪浅,值得珍藏。
作者以简洁明了的语言,传达了深刻的思想和情感。
作者以简洁明了的语言,传达了深刻的思想和情感。
作者以非凡的视角解读平凡,让文字焕发出别样的光彩。
哈哈哈,写的太好了https://www.lawjida.com/
哈哈哈,写的太好了https://www.lawjida.com/
《爵士乐手》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/82296.html
你的才华横溢,让人敬佩。 https://www.yonboz.com/video/75568.html
你的文章让我学到了很多知识,非常感谢。 https://www.yonboz.com/video/98509.html
你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/20388.html