准备数据测试数据

我这里提前在mysql中造好了一些数据,通过javaAPI导入到es中

mysql建表语句

CREATE TABLE `product_item` (`product_id` int NOT NULL AUTO_INCREMENT,`product_name` varchar(256) NOT NULL COMMENT '产品名称',`price` double(18,2) NOT NULL COMMENT '价格',`count` int NOT NULL COMMENT '数量',`remark` varchar(500) DEFAULT NULL COMMENT '备注',`supplier_id` bigint DEFAULT NULL COMMENT '供应商ID',PRIMARY KEY (`product_id`) USING BTREE,KEY `idx_product_name` (`product_name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='商品表';

es索引信息,这种创建方式不考虑分词

mysql数据导入ES,java使用BulkProcessor做ES批量导入,这里就不多介绍了

@PostMapping(value = "/db-to-es")public BaseResponse dbToEs() throws InterruptedException {List<ProductItem> productItemList = productItemService.getProductItemList();EsManager esManager = new EsManager();BulkProcessor bulkProcessor = null;try {bulkProcessor = esManager.bulkProcessor();} catch (UnknownHostException e) {e.printStackTrace();}for (ProductItem var1 : productItemList) {String s = new Gson().toJson(var1);bulkProcessor.add(new IndexRequest("product_item", "_doc", var1.getProductId().toString()).source(s, XContentType.JSON));}bulkProcessor.awaitClose(30, TimeUnit.SECONDS);return BaseResponse.ok("保存数据成功:", productItemList.size());}

mysql数据

ES数据查看

进入正题

1. mysql的 = 查询对应es的term

select *from product_item where product_id='8001'

ES 查询

GET product_item/_search
{"query": {"term": {"productId": {"value": "8001"}}}
}

java代码

@PostMapping(value = "/search/term")public BaseResponse term(){//Term查询TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("productId","8001");//在这里输入索引名称和type类型SearchResponse response = transportClient.prepareSearch("product_item").setTypes("_doc")//设置查询类型java.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)//设置查询关键词.setQuery(termQueryBuilder)//返回搜索响应信息.get();//打印下查询条件System.out.println("termQueryBuilder="+termQueryBuilder);SearchHits hits = response.getHits();List<ProductItem> list = new ArrayList<>();ProductItem productItem;for (SearchHit searchHit : hits) {Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();productItem = new ProductItem();System.out.printf("searchHit="+searchHit);productItem.setProductId(Long.valueOf(sourceAsMap.get("productId").toString()));productItem.setPrice(Double.valueOf(sourceAsMap.get("price").toString()));productItem.setProductName(sourceAsMap.get("productName").toString());productItem.setSupplierId(Long.valueOf(sourceAsMap.get("supplierId").toString()));productItem.setCount(Integer.valueOf(sourceAsMap.get("count").toString()));list.add(productItem);}return BaseResponse.ok("success:", list);}

2. like 查询,对应 es的wildcard  并对结果聚合 group by

ES查询 from=0 ,size=0 就是不显示hits结果内容,通过结果图可以看出来,这里着重说一下,from=0 并不是从第几页,而是从第几行,后续写分页查询会在用到这里。aggs是对结果进行聚合,聚合器的内容也很多,后续有时间会单独写一篇

GET product_item/_search
{"query": {"wildcard" : { "productName" : "*显示器*" }},"from": 0,"size": 0, "aggs": {"distinct": {"terms": {"field": "productName"}}}
}

buckets中的doc_conut 就是总数,和count(*)一样

java代码

/*** 模糊查询,结果聚合* @return*/@RequestMapping(value = "/search/wildcard", method = RequestMethod.POST)public BaseResponse<List<CateAttrRevise>> wildcard() {AggregationBuilder aggregationBuilder = AggregationBuilders.terms("productName_aggs").field("productName");BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();//模糊查询boolQueryBuilder.must(QueryBuilders.wildcardQuery("productName","*显示器*"));SearchResponse response = transportClient.prepareSearch("product_item").setTypes("_doc")//设置查询类型java.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)//设置聚合器.addAggregation(aggregationBuilder)//设置查询关键词.setQuery(boolQueryBuilder)//都设置为0,不显示hits结果内容.setFrom(0).setSize(0).get();Terms terms = response.getAggregations().get("productName_aggs");Map<String, Long> map = new HashMap<>();for(int i=0;i<terms.getBuckets().size();i++) {map.put(terms.getBuckets().get(i).getKey().toString(),terms.getBuckets().get(i).getDocCount());}return BaseResponse.ok(map);}

Elasticsearch(ES6)------(5)kibana的es查询、mysql查询转换和对应javaAPI使用(一)相关推荐

  1. mysql锁表查询_mysql锁表查询(mysql查询锁表语句)

    mysql锁表查询(mysql查询锁表语句) 2020-07-24 11:44:55 共10个回答 怎么查找mysql中的锁表语句showprocesslist;SHOWPROCESSLIST显示哪些 ...

  2. Elasticsearch(三) 使用kibana 操作ES

    文档中包含语句 1,索引(新增 查询 删除) 2, mapping 创建 3,文档(新增,修改,删除,批量新增) 4,文档查询(基本查询,高级查询,分页,高亮,排序) 1,使用kibana 新增 查询 ...

  3. [MySQL] 统计图数据查询 (MySQL查询时间范围内所有日期)

    1. 需求 任何管理系统都有统计图, 像这样的: 这里需要数据: 横坐标名 纵坐标数值 案例 需求: 需要统计近七天的注册用户数量 前端需要的数据格式: [{"日期":" ...

  4. php输出mysql查询,MySQL查询和PHP输出

    我有2个表,我想知道groupid = 1中有多少用户,并将该组中的所有成员打印到数组中. groups table userid groupid 1 1 2 1 3 1 4 2 5 2 users ...

  5. MySQL查询进阶之多表查询

    一.多表查询 1.引出 2.笛卡尔积 3. 笛卡尔积的解决方法 二.多表查询分类 1.等值连接和非等值连接 2.自连接和非自连接 3.内连接和外连接 SQL92:使用(+)创建连接 SQL99语法实现 ...

  6. MySQL高级-MySQL查询缓存优化

    MySQL查询缓存优化 1 概述 2 操作流程 3 查询缓存配置 4 开启查询缓存 5 查询缓存SELECT选项 6 查询缓存失效的情况 1 概述 开启Mysql的查询缓存,当执行完全相同的SQL语句 ...

  7. mysql 从a到z 查询_mysql 查询数据时按照A-Z顺序排序返回结果集

    mysql 查询数据时按照A-Z顺序排序返回结果集 $sql = "SELECT * , ELT( INTERVAL( CONV( HEX( left( name, 1 ) ) , 16, ...

  8. 1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册

    基本查询 查询单个数据使用find方法: // table方法必须指定完整的数据表名 Db::table('think_user')->where('id',1)->find(); 最终生 ...

  9. ElasticSearch + Kibana + logstash+ik结合springboot代码实现,比较ES和传统Mysql查询效率

    开发环境:Win10 开发环境:STS 概要:此篇文章主要是传统的Mysql查询和ES查询两种方式的效率比较,以及代码实现,另外使用logstash进行mysql数据的同步也可以直接理解为" ...

最新文章

  1. 2021年大数据常用语言Scala(十九):基础语法学习 iterator迭代器
  2. 052_CSS3 appearance属性
  3. KDD 2017 《ReasoNet: Learning to Stop Reading in Machine Comprehension》论文笔记
  4. matlab hold off没用,matlab中 hold on 与hold off的用法
  5. mysql 8.0远程连接_安装mysql 8.0.17并配置远程访问的方法
  6. python#原创第13篇~while循环+答案
  7. 二进制码转十进制java,Java将二进制转换为十进制
  8. AN EMPIRICAL STUDY OF EXAMPLE FORGETTING DURING DEEP NEURAL NETWORK LEARNING 论文笔记
  9. LoadRunner截取字符串操作
  10. 阿里云上CentOS的图形访问
  11. linux系统里route -n不起作用,Linux系统中traceroute命令使用详解
  12. 2022年(第八届)全国大学生统计建模大赛
  13. 基本存款账户编号怎么查_基本存款账户编号是行号吗?
  14. Mac翻译系列软件推荐三:Mate Translate for Mac多国语言翻译工具
  15. Java 用两个队列实现一个栈
  16. POJ 2387 Til the Cows Come Home BFS最短路求解
  17. linux逻辑卷缩减命令,linux命令:resize2fs、lvm逻辑卷lv扩展及缩减
  18. H5--drag拖拽事件
  19. 2021年焊工(初级)考试总结及焊工(初级)模拟考试题
  20. css中的单位换算_CSS中各种长度单位总结

热门文章

  1. Python3 Selenium+ChromeDriver抓取动态网页
  2. 2022年2月13日
  3. Flink的Window与WindowAll 算子对比
  4. bzoj 1878: [SDOI2009]HH的项链
  5. ffmpeg.exe的使用与环境设置
  6. 2021天津高考报名人数约为5.6万人,中考报名共9.9万人
  7. 2022-2028年中国电子铝箔行业市场发展现状及竞争格局预测报告
  8. 【推推】:列表模块原型图
  9. pbe更新服务器不在线是什么意思,英雄联盟3.6PBE更新内容_英雄联盟3.6PBE更新了什么_快吧游戏...
  10. Unity3D-使用图层,锁定背景图片