ES-1:Java的 ElasticsearchTemplate Or ElasticsearchRepository基础常用查询写法

这篇具有很好参考价值的文章主要介绍了ES-1:Java的 ElasticsearchTemplate Or ElasticsearchRepository基础常用查询写法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

安装elasticsearch

maven

数据来源: 网易数据

mysql的相关语法

Java代码文章来源地址https://www.toymoban.com/news/detail-608832.html


安装elasticsearch

docker run -p 9200:9200 -p 9300:9300 --name es_643 -d elasticsearch:6.4.3

maven

    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.1.16.RELEASE</version>
    </parent>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

数据来源: 网易数据

https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=334061612053

mysql的相关语法

  1. =
  2. in
  3. like
  4. >
  5. between  and
  6. is null
  7. is not null
  8. order by
  9. max min avg sum (发现es新语法stats直接统计聚合)

Java代码

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import lombok.Data;
import lombok.ToString;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.DisMaxQueryBuilder;
import org.elasticsearch.index.query.ExistsQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.metrics.avg.InternalAvg;
import org.elasticsearch.search.aggregations.metrics.max.InternalMax;
import org.elasticsearch.search.aggregations.metrics.min.InternalMin;
import org.elasticsearch.search.aggregations.metrics.stats.InternalStats;
import org.elasticsearch.search.aggregations.metrics.sum.InternalSum;
import org.elasticsearch.search.aggregations.support.ValueType;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortMode;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;

public class EsTest {


  public static void main(String[] args) throws Exception {
//    String data = HttpUtil.get(
//        "https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=334061612053");
//    JSONObject parseObject = JSONObject.parseObject(data);
//    JSONObject dataobj = parseObject.getJSONObject("data");
//    JSONArray areaTree = dataobj.getJSONArray("areaTree");
//    List<IndexQuery> queries = new ArrayList<>();
//    for (int i = 0; i < areaTree.size(); i++) {
//      JSONObject jsonObject = areaTree.getJSONObject(i);
//      String name = jsonObject.getString("name");
//      String id = jsonObject.getString("id");
//      JSONObject total = jsonObject.getJSONObject("total");
//      Integer confirm = total.getInteger("confirm");
//      Integer input = total.getInteger("input");
//      Integer severe = total.getInteger("severe");
//      Integer heal = total.getInteger("heal");
//      Integer dead = total.getInteger("dead");
//      Integer suspect = total.getInteger("suspect");
//      Area area = new Area();
//      area.setId(id);
//      area.setPid("-1");
//      area.setName(name);
//      area.setConfirm(confirm);
//      area.setInput(input);
//      area.setSevere(severe);
//      area.setHeal(heal);
//      area.setDead(dead);
//      area.setSuspect(suspect);
//      IndexQuery indexQuery = new IndexQuery();
//      indexQuery.setId(id.toString());
//      indexQuery.setObject(area);
//      indexQuery.setIndexName("area");
//      queries.add(indexQuery);
//
//    }
    Settings settings = Settings.builder().put("cluster.name", "docker-cluster").build();
    TransportClient transportClient = new PreBuiltTransportClient(settings);
    transportClient.addTransportAddress(new
        TransportAddress(InetAddress.getByName("localhost"), 9300));
    ElasticsearchTemplate elasticsearchTemplate = new ElasticsearchTemplate(
        transportClient);
//    boolean exists = elasticsearchTemplate.indexExists(Area.class);
//    System.out.println(exists);
//    if (exists) {
//      boolean deleteIndex = elasticsearchTemplate.deleteIndex(Area.class);
//      System.out.println(deleteIndex);
//    }
//    boolean index = elasticsearchTemplate.createIndex(Area.class);
//    System.out.println(index);
//    elasticsearchTemplate.bulkIndex(queries);
//    queries.clear();

    //mysql =
//    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//    nativeSearchQueryBuilder.withQuery(QueryBuilders.termQuery("name.keyword","中国"));
//    NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
//    AggregatedPage<Area> areas = elasticsearchTemplate.queryForPage(searchQuery, Area.class);
//    System.out.println(areas.getContent());

    //mysql in
//    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//    nativeSearchQueryBuilder.withQuery(QueryBuilders.termsQuery("name.keyword", "美国", "日本本土"));
//    NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
//    AggregatedPage<Area> areas = elasticsearchTemplate.queryForPage(searchQuery, Area.class);
//    System.out.println(areas.getContent());

    //mysql like
//    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//    nativeSearchQueryBuilder.withQuery(QueryBuilders.wildcardQuery("name.keyword", "*斯坦*"));
//    NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
//    AggregatedPage<Area> areas = elasticsearchTemplate.queryForPage(searchQuery, Area.class);
//    System.out.println(areas.getContent());
    //mysql >10000
//    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//    nativeSearchQueryBuilder.withQuery(QueryBuilders.rangeQuery("confirm").from(1000000));
//    NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
//    AggregatedPage<Area> areas = elasticsearchTemplate.queryForPage(searchQuery, Area.class);
//    System.out.println(areas.getContent());

    //mysql   between  1000 and 10000
//    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//    nativeSearchQueryBuilder.withQuery(QueryBuilders.rangeQuery("confirm").from(1000).to(10000));
//    NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
//    AggregatedPage<Area> areas = elasticsearchTemplate.queryForPage(searchQuery, Area.class);
//    System.out.println(areas.getContent());

    //mysql   is null
//    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//    ExistsQueryBuilder existsQueryBuilder = QueryBuilders.existsQuery("input");
//    boolQueryBuilder.mustNot(existsQueryBuilder);
//    nativeSearchQueryBuilder.withQuery(boolQueryBuilder);
//    NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
//    AggregatedPage<Area> areas = elasticsearchTemplate.queryForPage(searchQuery, Area.class);
//    System.out.println(areas.getContent());

    //mysql   is not null
//    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//    ExistsQueryBuilder existsQueryBuilder = QueryBuilders.existsQuery("input");
//    boolQueryBuilder.must(existsQueryBuilder);
//    nativeSearchQueryBuilder.withQuery(boolQueryBuilder);
//    NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
//    AggregatedPage<Area> areas = elasticsearchTemplate.queryForPage(searchQuery, Area.class);
//    System.out.println(areas.getContent());

    //mysql   order by
//    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//    FieldSortBuilder sortBuilder = SortBuilders.fieldSort("confirm").order(SortOrder.DESC);
    FieldSortBuilder sortBuilder = SortBuilders.fieldSort("confirm").order(SortOrder.ASC);
//    nativeSearchQueryBuilder.withSort(sortBuilder);
//    NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
//    AggregatedPage<Area> areas = elasticsearchTemplate.queryForPage(searchQuery, Area.class);
//    System.out.println(areas.getContent());

    //mysql   max min avg
//    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//    nativeSearchQueryBuilder.addAggregation(
//        AggregationBuilders.max("max_confirm").field("confirm").valueType(ValueType.LONG));
//    nativeSearchQueryBuilder.addAggregation(
//        AggregationBuilders.min("min_confirm").field("confirm").valueType(ValueType.LONG));
//    nativeSearchQueryBuilder.addAggregation(
//        AggregationBuilders.avg("avg_confirm").field("confirm").valueType(ValueType.LONG));
//    nativeSearchQueryBuilder.addAggregation(
//        AggregationBuilders.sum("sum_confirm").field("confirm").valueType(ValueType.LONG));
//    nativeSearchQueryBuilder.addAggregation(
//        AggregationBuilders.stats("stats_confirm").field("confirm").valueType(ValueType.LONG));
//    nativeSearchQueryBuilder.withFields("id");
//    NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
//    AggregatedPage<Area> areas = elasticsearchTemplate.queryForPage(searchQuery, Area.class);
//    InternalMax maxConfirm = (InternalMax) areas.getAggregation("max_confirm");
//    InternalMin minConfirm = (InternalMin) areas.getAggregation("min_confirm");
//    InternalAvg avgConfirm = (InternalAvg) areas.getAggregation("avg_confirm");
//    InternalSum sumConfirm = (InternalSum) areas.getAggregation("sum_confirm");
//    InternalStats statsConfirm = (InternalStats) areas.getAggregation("stats_confirm");
//    System.out.println(BigDecimal.valueOf(maxConfirm.getValue()));
//    System.out.println(BigDecimal.valueOf(minConfirm.getValue()));
//    System.out.println(BigDecimal.valueOf(avgConfirm.getValue()).setScale(0, RoundingMode.HALF_UP));
//    System.out.println(BigDecimal.valueOf(sumConfirm.getValue()));
//    System.out.println("--------------------Stats---------------------------");
//    System.out.println(BigDecimal.valueOf(statsConfirm.getMax()));
//    System.out.println(BigDecimal.valueOf(statsConfirm.getMin()));
//    System.out.println(BigDecimal.valueOf(statsConfirm.getAvg()));
//    System.out.println(BigDecimal.valueOf(statsConfirm.getSum()));
//    System.out.println(BigDecimal.valueOf(statsConfirm.getCount()));
  }

}

@Data
@ToString
@Document(indexName = "area")
class Area {

  @Id
  private String id;
  private String pid;
  @Field(type = FieldType.Keyword)
  private String name;
  private Integer confirm;
  private Integer input;
  private Integer severe;
  private Integer heal;
  private Integer dead;
  private Integer suspect;
}

到了这里,关于ES-1:Java的 ElasticsearchTemplate Or ElasticsearchRepository基础常用查询写法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES常用命令与常用查询(1)

    查看集群状态 创建索引 查看所有索引 查看索引信息 删除索引 2.1 查询所有 match_all 使用match_all,默认只会返回10条数据 返回指定条数 size 不能无限大,如果过大会出现异常 1、查询结果的窗口太大,from + size的结果必须小于或等于10000,而当前查询结果的窗 口为20000。 2、可以

    2024年02月06日
    浏览(51)
  • ES查询常用语法

    目录 1. ElasticSearch之查询返回结果各字段含义 2. match 查询 3. term查询 4. terms 查询 5. range 范围 6. 布尔查询 6.1 filter加快查询效率的原因 7. boosting query(提高查询) 8. dis_max(最佳匹配查询) 9. 分页 10. 聚合查询【内含实际的demo】 执行命令:索引库名称/_search 空搜索的结果为: 按照

    2023年04月09日
    浏览(51)
  • 【ES常用查询】基于ElasticsearchRestTemplate及NativeSearchQuery的查询

    包含当前es所有的查询, 需要什么代码直接照搬,改个参数就行! 用的好请务必给我点赞!!!感谢爱你们!!! 为啥写这篇文章呢: 大概是因为目前公司用的api跟以前的不太一样, 以前我们是基于高标准客户端直接做的, 但是目前这边同事是基于ElasticsearchRestTemplate跟

    2024年02月03日
    浏览(42)
  • ES学习-常用的查询接口

    我们有大部分数据要通过es进行查询,上周在查的时候发现有些不会,今天有空琢磨了一下 常用的查询接口整理成collection了,附在链接里哈哈哈哈哈哈哈 链接:   https://pan.baidu.com/s/1RSFvgbNALPmItW9unvb7Dg?pwd=qwer   提取码: qwer 复制这段内容后打开百度网盘手机App,操作更方便哦

    2024年02月09日
    浏览(42)
  • 工作常用ES DSL查询语句(干货满满)

       工作中几乎每天都需要使用到ES查询数据,需要根据自己的查询需求构造DSL查询语句来实现,本文记录并分享本人工作中常用的DSL语句以及所遇到问题的解决方案,DSL语句灵活多变,可进行多种组合,任你搭配,让我们一起往下看,希望对你有帮助。 2.1 查看所有索引的

    2024年02月02日
    浏览(78)
  • ES7 and or 关联条件查询JAVA

    @ES7 and or 关联条件查询JAVA 实现条件( platform=‘xxx’ and (home_path=‘xxx’ or nick_name=‘xxx’ )) kibana

    2024年02月08日
    浏览(53)
  • DB SQL 转 ES DSL(支持多种数据库常用查询、统计、平均值、最大值、最小值、求和语法)...

    1. 简介   日常开发中需要查询 Elasticsearch 中的数据时,一般会采用 RestHighLevelClient 高级客户端封装的API。项目中一般采用一种或多种关系型数据库(如: Mysql 、 PostgreSQL 、 Oracle 等) + NoSQL(如: Elasticsearch )存储方案;不同关系数据库可以采用 Mybatis-Plus 方案屏蔽数据库的方言

    2024年01月17日
    浏览(51)
  • Windows取证——路由查询常用命令和域操作基础命令

    tracert IP                                        路由跟踪 route print                                       打印路由表 arp -a                                            列出本网段内所有活跃的IP地址 arp -s (ip + mac)

    2024年02月13日
    浏览(46)
  • Elasticsearch8常用查询api,java ElasticsearchClient写法和原生Rest DSL写法

    Java Client Rest Api Java Client Rest Api Java Client Rest Api Java Client Rest Api ? 用来匹配任意字符, * 用来匹配零个或者多个字符。 Java Client Rest Api Java Client Rest Api Java Client Java Client Rest Api

    2024年02月08日
    浏览(60)
  • 【ElasticSearch】ElasticSearch Java API的使用——常用索引、文档、查询操作(二)

    Elaticsearch ,简称为es,es是一个开源的 高扩展 的 分布式全文检索引擎 ,它可以近乎 实时的存储 、 检索数据; 本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的 目的

    2024年01月16日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包