添加依赖
如何连接es客户端
RestHighLevelClient 代表是高级客户端
其中hostname:es的服务器地址,prot端口号 ,scheme:http还是https
如果不在使用es可以进行关闭,可以防止浪费一些资源
java如何创建索引:
接下来到kibanba看下是否有这个索引
java如何查询索引
可以看到返回的结果是相同的,创建时间,分片,副本,uuid,版本号,索引名字
java如何删除索引
删除后在kinbaba查询这个索引
结果是没有这个索引
java如何创建数据
第一次操作:created
kinbanba结果
第二次操作:update
同一个id他会任务是同一个数据,会直接进行修改 但是这种操作时全局修改。
java如何修改数据
局部修改数据返回结果:updated
kibanba数据
java如何查询数据
java如何删除数据
kibanba查询数据
结果没有查到
java如何批量增加数据
kibanba结果
这种方式和单个新增的区别是什么呢
批量就是多个请求包装在一块一起发送
java如何批量删除
kibanba的结果
java如何全量查询
kibanba结果
java如何分页查询&条件查询
一 精准查询:查询年龄等于20的数据 关键字 termQueyr
二 分页查询 关键字 from size
三 排序查询 关键字:sort
时间:1ms
条数:6 hits
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1001",
"_score" : null,
"_source" : {
"sex" : "男",
"userName" : "胡因",
"age" : 20
},
"sort" : [
20
]
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "4",
"_score" : null,
"_source" : {
"age" : 20,
"sex" : "女",
"userName" : "胡因5"
},
"sort" : [
20
]
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "3",
"_score" : null,
"_source" : {
"age" : 4,
"sex" : "女",
"userName" : "胡因4"
},
"sort" : [
4
]
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "2",
"_score" : null,
"_source" : {
"age" : 3,
"sex" : "男",
"userName" : "胡因3"
},
"sort" : [
3
]
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_score" : null,
"_source" : {
"age" : 2,
"sex" : "男",
"userName" : "胡因2"
},
"sort" : [
2
]
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "0",
"_score" : null,
"_source" : {
"age" : 1,
"sex" : "女",
"userName" : "胡因1"
},
"sort" : [
1
]
}
四 值查询出必要字段:关键字 fetchSource
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1001",
"_score" : null,
"_source" : {
"userName" : "胡因"
},
"sort" : [
20
]
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "4",
"_score" : null,
"_source" : {
"userName" : "胡因5"
},
"sort" : [
20
]
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "3",
"_score" : null,
"_source" : {
"userName" : "胡因4"
},
"sort" : [
4
]
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "2",
"_score" : null,
"_source" : {
"userName" : "胡因3"
},
"sort" : [
3
]
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_score" : null,
"_source" : {
"userName" : "胡因2"
},
"sort" : [
2
]
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "0",
"_score" : null,
"_source" : {
"userName" : "胡因1"
},
"sort" : [
1
]
}
java如何组合查询&范围查询
一组合查询:关键字 BoolQueryBuilder must
查询出来3条原因是
问题可能出在你的搜索条件上。MatchQuery是一个全文搜索查询,它会对文本字段进行分词,然后进行匹配。由于你的字段
userName
和sex
都是进行分词的文本字段(默认情况下),所以它们会被分词器处理后再进行匹配。在分词器的处理过程中,可能会将“胡因1”分成两个词,“胡因”和“1”,所以它们在匹配过程中会被匹配到。
时间:1ms
条数:3 hits
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1001",
"_score" : 0.8237212,
"_source" : {
"sex" : "男",
"userName" : "胡因",
"age" : 20
}
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.8054662,
"_source" : {
"age" : 2,
"sex" : "男",
"userName" : "胡因2"
}
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.8054662,
"_source" : {
"age" : 3,
"sex" : "男",
"userName" : "胡因3"
}
}
如果想解决这种问题:关键字 termQuery精准匹配 keyword 代表不分词
关于或的条件查询:关键词:should
时间:0s
条数:2 hits
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1001",
"_score" : 1.7917595,
"_source" : {
"sex" : "男",
"userName" : "胡因",
"age" : 20
}
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "0",
"_score" : 1.0,
"_source" : {
"age" : 1,
"sex" : "女",
"userName" : "胡因1"
}
}
范围查询:关键字 rangQuery 范围 gte 大于等于 lte 小于等于
时间:0s
条数:3 hits
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"age" : 2,
"sex" : "男",
"userName" : "胡因2"
}
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"age" : 3,
"sex" : "男",
"userName" : "胡因3"
}
}
{
"_index" : "users",
"_type" : "_doc",
"_id" : "0",
"_score" : 1.0,
"_source" : {
"age" : 1,
"sex" : "女",
"userName" : "胡因1"
}
}
java如何聚合查询
最大年龄:关键字 AggregationBuilder max(别名)field(字段)
Max maxAgg = search.getAggregations().get("ageAge");
double value = maxAgg.getValue();
年龄分组 关键字:terms
Terms ageGroup = search.getAggregations().get("ageGroup");
List<? extends Terms.Bucket> buckets = ageGroup.getBuckets();
for (Terms.Bucket bucket : buckets) {
String key = bucket.getKeyAsString(); // 年龄组的键
long docCount = bucket.getDocCount(); // 年龄组的文档数量
System.out.println("年龄组: " + key + ", 文档数量: " + docCount);
}