如何用java使用es

添加依赖

如何连接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是一个全文搜索查询,它会对文本字段进行分词,然后进行匹配。由于你的字段userNamesex都是进行分词的文本字段(默认情况下),所以它们会被分词器处理后再进行匹配。在分词器的处理过程中,可能会将“胡因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);
}

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java使用Elasticsearch查询可以通过以下步骤实现: 1. 首先需要安装ElasticsearchJava客户端库,可以使用Maven或Gradle等构建工具进行安装。 2. 创建Elasticsearch客户端对象,连接到Elasticsearch集群。 3. 构建查询请求,可以使用QueryBuilder对象来构建查询条件。 4. 执行查询请求,可以使用SearchRequest和SearchResponse对象来执行查询操作。 5. 处理查询结果,可以使用SearchHits对象来获取查询结果。 6. 关闭Elasticsearch客户端对象,释放资源。 以上是Java使用Elasticsearch查询的基本步骤,具体实现可以参考Elasticsearch官方文档和Java客户端库的API文档。 ### 回答2: Java是一种流行的编程语言,而Elasticsearch是一个基于Java的开源搜索引擎,具有强大的搜索和分析能力。使用Java开发Elasticsearch查询可以方便地实现搜索、分析、可视化和数据仓库等功能,以下是使用Java进行Elasticsearch查询的一些方法: 1. 引入ElasticsearchJava客户端库:需要添加maven依赖,或手动将.jar文件添加到类路径。 2. 连接Elasticsearch:需要指定Elasticsearch节点的IP、端口和集群名称,通过创建TransportClient对象来建立连接。 3. 构建查询对象:可以使用QueryBuilder来构建一个查询对象,包括TermQuery、MatchQuery、RangeQuery等。 4. 执行查询:通过调用TransportClient的search方法执行查询,并指定查询对象和查询的返回类型。 5. 处理查询结果:可以使用SearchResponse对象获取查询结果,包括总命数、查询耗时、每个文档的得分和聚合结果等。 6. 统计结果分析:可以使用AggregationBuilder构建聚合查询,并统计结果。 使用Java进行Elasticsearch查询需要熟悉Elasticsearch的查询语法和API,以及Java语言的编程能力。此外,需要合理使用索引、映射、分片等功能,以达到更高效的查询。在实际开发,还需要考虑数据量、查询复杂度、网络带宽等因素,以获得最佳的查询性能。总之,使用Java进行Elasticsearch查询可以帮助开发者更好地利用Elasticsearch的强大功能,实现高效的搜索和分析。 ### 回答3: Java使用Elasticsearch查询需要先了解Elasticsearch的基本概念和使用方法。Elasticsearch是一个开源的分布式搜索引擎,主要用于全文检索、数据分析以及实时数据反馈。它基于Lucene引擎开发,提供了RESTful API和JSON格式的查询接口,可以在数据量大的情况下快速查询、过滤和聚合。Java作为一种主流编程语言,与Elasticsearch的集成非常便捷。 第一步是创建一个Elasticsearch客户端对象,可以使用ElasticsearchJava API创建,代码如下: ```java TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); ``` 其9300是Elasticsearch默认的端口,客户端对象可以通过addTransportAddress方法连接到Elasticsearch集群的某个节点。 第二步是创建查询条件,Elasticsearch查询可以通过QueryBuilder对象构建。常见的查询条件包括: - matchQuery:基于match查询条件查询满足指定字段和关键字的文档。 - termQuery:基于term查询条件查询满足指定字段和精确值的文档。 - boolQuery:基于布尔查询条件组合多个查询条件,支持must、must_not、should和filter等关键字。 代码示例: ```java QueryBuilder queryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.matchQuery("title", "Java")) .mustNot(QueryBuilders.termQuery("status", "0")) .should(QueryBuilders.termQuery("authorId", "123")) .filter(QueryBuilders.rangeQuery("createTime").gte("2022-01-01")); ``` 第三步是执行查询,在Elasticsearch,查询是通过SearchRequestBuilder对象构建和执行的,代码示例: ```java SearchResponse response = client.prepareSearch("articles") .setTypes("article") .setQuery(queryBuilder) .setFrom(0) .setSize(10) .addSort(SortBuilders.fieldSort("createTime").order(SortOrder.DESC)) .get(); ``` 其,articles是索引名,article是类型名,setQuery方法传入查询条件,setFrom和setSize用于分页查询,addSort方法可以设置排序。查询结果是返回的SearchResponse对象,可以通过hits方法获取命的文档信息。 最后,记得关闭客户端资源: ```java client.close(); ``` 总的来说,Java使用Elasticsearch查询的步骤包括创建Elasticsearch客户端对象、创建查询条件、执行查询和关闭客户端资源。Elasticsearch提供了丰富的查询API和查询条件,可以灵活地满足不同的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值