当前位置: 首页 > news >正文

Elasticsearch 简单搜索查询案例

1.MySql表结构/数据

SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for user_lables
-- ----------------------------
DROP TABLE IF EXISTS `user_lables`;
CREATE TABLE `user_lables` (`id` varchar(255) DEFAULT NULL COMMENT '用户唯一标识',`age` varchar(255) DEFAULT NULL COMMENT '用户年龄',`sex` varchar(255) DEFAULT NULL COMMENT '用户性别 1:男,2:女',`tel` varchar(255) DEFAULT NULL COMMENT '联系电话',`is_high` varchar(255) DEFAULT NULL COMMENT '高价值用户 0:否,1:是',`final_by` varchar(255) DEFAULT NULL COMMENT '最后下单时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;-- ----------------------------
-- Records of user_lables
-- ----------------------------
INSERT INTO `user_lables` VALUES ('10001', '23', '1', '130xxxx1111', '1', '2022-09-11 22:10:12');
INSERT INTO `user_lables` VALUES ('10002', '33', '1', '157xxxx4506', '0', '2023-06-13 12:09:11');
INSERT INTO `user_lables` VALUES ('10003', '24', '2', '157xxxx4309', '1', '2023-07-15 22:19:21');
INSERT INTO `user_lables` VALUES ('10004', '16', '1', '151xxxx5516', '1', '2023-06-29 12:29:31');
INSERT INTO `user_lables` VALUES ('10005', '18', '1', '152xxxx4506', '1', '2023-07-17 17:39:41');
INSERT INTO `user_lables` VALUES ('10006', '19', '2', '153xxxx4506', '0', '2023-07-18 19:49:51');
INSERT INTO `user_lables` VALUES ('10007', '20', '2', '157xxxx4506', '1', '2023-07-18 23:59:11');
INSERT INTO `user_lables` VALUES ('10008', '23', '1', '189xxxx4506', '0', '2023-06-14 16:39:51');
INSERT INTO `user_lables` VALUES ('10009', '36', '2', '137xxxx4506', '1', '2023-06-15 13:29:41');
INSERT INTO `user_lables` VALUES ('10010', '45', '2', '130xxxx4506', '1', '2023-06-29 09:19:31');
INSERT INTO `user_lables` VALUES ('10011', '30', '1', '157xxxx4506', '1', '2023-07-14 21:09:21');
INSERT INTO `user_lables` VALUES ('10012', '33', '2', '157xxxx4506', '0', '2023-07-13 22:29:11');
INSERT INTO `user_lables` VALUES ('10013', '29', '2', '157xxxx4516', '0', '2023-07-13 23:23:21');
INSERT INTO `user_lables` VALUES ('10014', '28', '1', '157xxxx5516', '0', '2023-07-13 23:22:21');

2.Java 实体类

2.1 user_lables表实体

public class User_lables {private String id;private String age;private String sex;private String tel;private String is_high;private String final_by;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public String getIs_high() {return is_high;}public void setIs_high(String is_high) {this.is_high = is_high;}public String getFinal_by() {return final_by;}public void setFinal_by(String final_by) {this.final_by = final_by;}public User_lables(String id, String age, String sex, String tel, String is_high, String final_by) {this.id = id;this.age = age;this.sex = sex;this.tel = tel;this.is_high = is_high;this.final_by = final_by;}public User_lables() {}@Overridepublic String toString() {return "User_lables{" +"id='" + id + '\'' +", age='" + age + '\'' +", sex='" + sex + '\'' +", tel='" + tel + '\'' +", is_high='" + is_high + '\'' +", final_by='" + final_by + '\'' +'}';}

2.2 查询参数实体

public class Es_bean {private String name;private String type;private String value;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}
}

3.整体代码

package com.jinshan.datacenter.estest;/*** @author MR.Liu* @version 1.0* @data 2023-07-20 11:19*/
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.jinshan.datacenter.es.Es_bean;
import com.jinshan.datacenter.es.User_lables;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class MySQLDemo {// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.jdbc.Driver";static final String DB_URL = "jdbc:mysql://localhost:3306/test";// MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL//static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";//static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";// 数据库的用户名与密码,需要根据自己的设置static final String USER = "root";static final String PASS = "000000";public static Connection GetConn(){Connection conn = null;try{// 注册 JDBC 驱动Class.forName(JDBC_DRIVER);// 打开链接System.out.println("连接数据库...");conn = DriverManager.getConnection(DB_URL,USER,PASS);// 执行查询System.out.println(" 实例化Statement对象...");}catch(SQLException se){// 处理 JDBC 错误se.printStackTrace();} catch (ClassNotFoundException e) {throw new RuntimeException(e);}return conn;}public static void InsertDoc(RestHighLevelClient client, String indexName , List<User_lables> list) throws IOException {// 批量导入数据BulkRequest request = new BulkRequest();// 添加索引请求到批量请求中for (int i =0;i<list.size();i++){Gson gson = new Gson();String json = gson.toJson(list.get(i));request.add(new IndexRequest(indexName).id(String.valueOf(i)).source(json, XContentType.JSON));}// 发送批量请求try {BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);if (response.hasFailures()) {System.out.println("批量导入数据失败:" + response.buildFailureMessage());} else {System.out.println("批量导入数据成功");}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws SQLException, IOException {// 创建客户端对象RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));Connection conn = GetConn();Statement stat=conn.createStatement();String sql = "select * from user_lables";ResultSet rs = stat.executeQuery(sql);BeanListHandler<User_lables> bh =new BeanListHandler<User_lables>(User_lables.class);//rs是ResultSet得到的从返回集合List<User_lables> handle = bh.handle(rs);//InsertDoc(client,"user_test1",handle);String data = "{\n" +"  \"selectedTags\": [\n" +"    {\n" +"      \"effect\": \"user\",\n" +"      \"label\": \"男性\",\n" +"      \"name\": \"sex\",\n" +"      \"value\": \"1\",\n" +"      \"type\": \"match\"\n" +"    },\n" +"    {\n" +"      \"effect\": \"user\",\n" +"      \"label\": \"10~50\",\n" +"      \"name\": \"age\",\n" +"      \"value\": \"20-30\",\n" +"      \"type\": \"rangeBoth\"\n" +"    },\n" +"    {\n" +"      \"effect\": \"user\",\n" +"      \"label\": \"高质量用户\",\n" +"      \"name\": \"is_high\",\n" +"      \"value\": \"0\",\n" +"      \"type\": \"match\"\n" +"    }\n" +"  ]\n" +"}";JSONObject object = JSON.parseObject(data);JSONArray array = object.getJSONArray("selectedTags");List<Es_bean> list = array.toJavaList(Es_bean.class);SearchRequest request = new SearchRequest();request.indices("user_test1");request.types("_doc");SearchSourceBuilder builder = new SearchSourceBuilder();request.source(builder);String[] includes = {"id", "age","sex","tel","is_high","final_by"};builder.fetchSource(includes, null);builder.from(0);builder.size(1000);BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();for (int i=0;i<list.size();i++) {String name = list.get(i).getName();String value = list.get(i).getValue();String type = list.get(i).getType();if (type.equals("match")) {boolQueryBuilder.must(QueryBuilders.matchQuery(name, value));}if (type.equals("rangeBoth")) {String[] split = value.split("-");String v1 = split[0];String v2 = split[1];boolQueryBuilder.must(QueryBuilders.rangeQuery(name).lte(v2).gte(v1));}}builder.query(boolQueryBuilder);request.source(builder);RequestOptions options = RequestOptions.DEFAULT;List<User_lables> memberTags = new ArrayList<>();try {SearchResponse search = client.search(request, options);SearchHits hits = search.getHits();Iterator<SearchHit> iterator = hits.iterator();while (iterator.hasNext()) {SearchHit hit = iterator.next();String sourceAsString = hit.getSourceAsString();User_lables memberTag = JSON.parseObject(sourceAsString, User_lables.class);System.out.println(memberTag);memberTags.add(memberTag);}} catch (IOException e) {e.printStackTrace();}conn.close();client.close();}
}

相关文章:

Elasticsearch 简单搜索查询案例

1.MySql表结构/数据 SET FOREIGN_KEY_CHECKS0;-- ---------------------------- -- Table structure for user_lables -- ---------------------------- DROP TABLE IF EXISTS user_lables; CREATE TABLE user_lables (id varchar(255) DEFAULT NULL COMMENT 用户唯一标识,age…...

【RabbitMQ(day1)】RabbitMQ的概述和安装

入门RabbitMQ 一、RabbitMQ的概述二、RabbitMQ的安装三、RabbitMQ管理命令行四、RabbitMQ的GUI界面 一、RabbitMQ的概述 MQ&#xff08;Message Queue&#xff09;翻译为消息队列&#xff0c;通过典型的【生产者】和【消费者】模型&#xff0c;生产者不断向消息队列中生产消息&…...

Too many files with unapproved license: 2 See RAT report

解决方案 mvn -Prelease-nacos -Dmaven.test.skiptrue -Dpmd.skiptrue -Dcheckstyle.skiptrue -Drat.numUnapprovedLicenses100 clean install 或者 mvn -Prelease-nacos -Dmaven.test.skiptrue -Drat.numUnapprovedLicenses100 clean install...

Windows11的VTK安装:VS201x+Qt5/Qt6 +VTK7.1/VTK9.2.6

需要提前安装好VS2017和VS2019和Qt VS开发控件以及Qt VS-addin。 注意Qt6.2.4只能跟VTK9.2.6联合编译&#xff08;目前VTK9和Qt6的相互支持版本&#xff09;。 首先下载VTK&#xff0c;需要下载源码和data&#xff1a; Download | VTKhttps://vtk.org/download/ 然后这两个文…...

大数据时代个人信息安全保护小贴士

个人信息安全保护小贴士 1. 朋友圈“五不晒”2. 手机使用“四要”、“六不要”3. 电脑使用“七注意”4. 日常上网“七注意”5. 日常生活“五注意” 互联网就像公路&#xff0c;用户使用它&#xff0c;就会留下脚印。 每个人都在无时不刻的产生数据&#xff0c;在消费数据的同时…...

windows 修改 RDP 远程桌面端口号

打开 PowerShell &#xff0c; 执行regedit 依次展开 PortNumber HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Control \Terminal Server \WinStations \RDP-Tcp 右边找到 PortNumber &#xff0c;对应修改自己的端口号 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Co…...

面试题-TS(四):如何在 TypeScript 中使用类和继承?

面试题-TS(4)&#xff1a;如何在 TypeScript 中使用类和继承&#xff1f; 在TypeScript中&#xff0c;类是一种重要的概念&#xff0c;它允许我们使用面向对象的编程风格来组织和管理代码。类提供了一种模板&#xff0c;用于创建具有相同属性和行为的对象。通过继承&#xff0…...

React之JSX的介绍与使用步骤,注意事项,条件渲染,列表渲染以及css样式处理

React之JSX的介绍与使用 一、JSX的介绍二、JSX使用步骤三、JSX注意事项四、JSX中使用JavaScript表达式五、条件渲染六、列表渲染七、CSS样式处理八、JSX 总结 一、JSX的介绍 简介 JSX是JavaScript XML的简写&#xff0c;表示了在Javascript代码中写XML(HTML)格式的代码 优势 声…...

sql进阶:求满足某列数值相加无限接近90%的行(90分位)

sql 一、案例分析二、思路三、代码实现一、案例分析 表中有某个id列和数值列,求数值列占比为90%的id,如有个用户表,存储id和消费金额order_cnt,求一条sql查出消费占比无限接近90%的所有客户,如表中总消费为10000,占比最高的是4000、3000、2800,对应A、B、C用户,查出A、B、C用户…...

设计模式大白话——观察者模式

文章目录 一、概述二、示例三、模式定义四、其他 一、概述 ​ 与其叫他观察者模式&#xff0c;我更愿意叫他叫 订阅-发布模式 &#xff0c;这种模式在我们生活中非常常见&#xff0c;比如&#xff1a;追番了某个电视剧&#xff0c;当电视剧有更新的时候会第一时间通知你。当你…...

机器学习小记-序

机器学习是人工智能的一个重要分支&#xff0c;根据学习任务的不同&#xff0c;可以将机器学习分为以下几类&#xff1a; 监督学习&#xff08;Supervised Learning&#xff09;&#xff1a; 应用场景&#xff1a;监督学习适用于已标记数据集的任务&#xff0c;其中每个样本都有…...

IP基础知识总结

IP他负责的是把IP数据包在不同网络间传送&#xff0c;这是网络设计相关的&#xff0c;与操作系统没有关系。所以这部分知识&#xff0c;不是网络的重点。IP和路由交换技术联系紧密。但是要作为基本知识点记住。 一、基本概念 网络层作用&#xff1a;实现主机与主机之间通信。 …...

Java设计模式-单例模式

单例模式 1.单例模式含义 单例模式就是保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 其实单例模式很好理解&#xff0c;当我们new一个对象实例的时候&#xff0c;这个对象会被放到一个内存中&#xff0c;当我们再次new同一个对象的实例的时候&#xf…...

小程序----配置原生内置编译插件支持sass

修改project.config.json配置文件 在 project.config.json 文件中&#xff0c;修改setting 下的 useCompilerPlugins 字段为 ["sass"]&#xff0c; 即可开启工具内置的 sass 编译插件。 目前支持三个编译插件&#xff1a;typescript、less、sass 修改之后可以将原.w…...

GitLab 删除项目

1.点击头像 2.点击Profile 3.选择要删除的项目点进去 4.settings-general-Advances-expand 5.然后在弹出框中输入你要删除的项目名称即可...

Mac m1 下eclipse下载及jdk环境变量配置

一、安装eclipse 1、下载eclipse Eclipse downloads - Select a mirror | The Eclipse Foundation 此版本为m1芯片适用版本 2、下载后下一步安装即可 安装成功后&#xff0c;可以看到图标&#xff1a; 二、安装jdk 1、下载jdk 下载此版本即可&#xff0c;下载完成之后一直…...

Java中List与数组之间的相互转换

一、List列表与对象数组 List列表中存储对象&#xff0c;如List<Integer>、List<String>、List<Person>&#xff0c;对象数组中同样存储相应的对象&#xff0c;如Integer[]、String[]、Person[]&#xff0c;对象数组与对象List的转换可通过如下方式实现&…...

嵌入式_GD32看门狗配置

嵌入式_GD32独立看门狗配置与注意事项 文章目录 嵌入式_GD32独立看门狗配置与注意事项前言一、什么是独立看门狗定时器&#xff08;FWDGT&#xff09;二、独立看门狗定时器原理三、独立看门狗定时器配置过程与注意事项总结 前言 使用GD3单片机时&#xff0c;为了提供了更高的安…...

Python 中的 JSON 操作:简单、高效的数据交换格式

在现代的数据交换和存储中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&#xff0c;备受青睐。它不仅易于阅读和理解&#xff0c;还可以灵活地表达和存储高维数据。本文将介绍如何在 Python 中操作 JSON 文件&#xff0c;…...

IT行业面试攻略:技巧与心态的平衡

引言&#xff1a;在面试IT公司时&#xff0c;调整好心态是取得优秀表现的关键。面试心态直接影响着我们在面试中的自信程度和表现。面对这一挑战&#xff0c;我们需要学会积极自信、认识到紧张是正常的、进行充分准备以及以积极的心态去迎接面试。只有在拥有正确的心态下&#…...

Ollama平台部署GLM-4.7-Flash:从零开始搭建本地大模型服务

Ollama平台部署GLM-4.7-Flash&#xff1a;从零开始搭建本地大模型服务 1. 为什么选择GLM-4.7-Flash&#xff1f; 在众多开源大模型中&#xff0c;GLM-4.7-Flash以其独特的定位脱颖而出。这个30B参数的MoE&#xff08;混合专家&#xff09;模型&#xff0c;在性能与效率之间取…...

ARMv8开发实战:Aarch64函数调用那些坑(含AAPCS64避坑指南)

ARMv8开发实战&#xff1a;Aarch64函数调用那些坑&#xff08;含AAPCS64避坑指南&#xff09; 在嵌入式开发和系统编程领域&#xff0c;ARMv8架构因其出色的能效比和性能表现&#xff0c;已经成为移动设备、服务器甚至超级计算机的主流选择。然而&#xff0c;当开发者从x86平台…...

AI Agent 的动态知识更新:保持 LLM 知识的实时性

AI Agent 的动态知识更新:保持 LLM 知识的实时性 关键词:AI Agent、动态知识更新、大语言模型(LLM)、实时性、知识图谱 摘要:本文聚焦于 AI Agent 的动态知识更新,旨在探讨如何保持大语言模型(LLM)知识的实时性。首先介绍了相关背景,包括目的、预期读者等。接着阐述了…...

陀螺匠企业助手-产品

1. 功能说明维护出售产品的基本信息数据&#xff0c;支持在添加商机/合同中进行选择。2. 进入产品页面路径&#xff1a;客户>产品管理>产品3. 新增产品功能说明&#xff1a;维护产品信息&#xff0c;添加完成的产品信息&#xff0c;可以在添加商机/合同中进行选择。新增产…...

语音播报实时

目录 GPT-SoVITS&#xff08;强烈推荐&#xff09; Fish Speech-1.5 GPT-SoVITS&#xff08;强烈推荐&#xff09; RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) Fish Speech-1.5 追求极致流畅的实时对话&a…...

GaussDB JDBC SSL加密全攻略:从零配置到生产环境最佳实践

GaussDB JDBC SSL加密全攻略&#xff1a;从零配置到生产环境最佳实践 在数据驱动的时代&#xff0c;数据库连接的安全性已成为企业级应用不可忽视的生命线。作为华为云推出的分布式关系型数据库&#xff0c;GaussDB在金融、政务等对安全性要求极高的场景中广泛应用。而JDBC作为…...

IntelliJ Conf:JetBrains Koog Java原生AI Agent框架实战

文章目录前言&#xff1a;Java程序员的"Agent焦虑"终于有解了认识Koog&#xff1a;不是又一个LangChain的Java版环境准备&#xff1a;5分钟让项目跑起来实战&#xff1a;从Hello World到智能客服第一步&#xff1a;定义工具&#xff08;Tool&#xff09;第二步&#…...

【读书笔记】《逆风跑者》

《逆风跑者》| 长跑人的阿甘正传 如果你也曾困顿过&#xff0c;迷茫过&#xff0c;被生活压得喘不过气来&#xff0c;那么就拉过一把椅子静静地坐一会儿吧。听我说说这位无声跑者的事儿&#xff0c;和他一起不屈不挠地寂静奔跑一次。 &#x1f4d6; 关于这本书 《逆风跑者》是…...

5分钟搞定fastANI安装与基因组比对:从conda安装到结果解读全流程

5分钟搞定fastANI安装与基因组比对&#xff1a;从conda安装到结果解读全流程 第一次接触基因组比对时&#xff0c;我被各种复杂的参数和晦涩的结果文件搞得晕头转向。直到发现了fastANI这个神器——它不仅能快速计算基因组间的平均核苷酸相似性&#xff08;ANI&#xff09;&am…...

信息安全毕设容易的项目选题汇总

0 选题推荐 - 网络与信息安全篇 毕业设计是大家学习生涯的最重要的里程碑&#xff0c;它不仅是对四年所学知识的综合运用&#xff0c;更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要&#xff0c;它应该既能体现你的专业能力&#xff0c;又能满…...