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

ES 8.14 Java 代码调用,增加knnSearch 和 混合检索 mixSearch

1、pom依赖

        <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>8.14.0</version></dependency><dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.14.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.9.0</version> <!-- 使用你所需的版本 --></dependency><dependency><groupId>jakarta.json.bind</groupId><artifactId>jakarta.json.bind-api</artifactId><version>2.0.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.2</version></dependency><dependency><groupId>org.glassfish</groupId><artifactId>jakarta.json</artifactId><version>2.0.1</version></dependency>

2、ES 8.1的相关接口 主要参考: Java封装Elasticsearch8常用接口方法(一)_elasticsearch8 java接口-CSDN博客

3、EsService 主要 增加knnSearch 和 混合检索 mixSearch

/*** KNN搜索** @param indexName 索引名称* @param vector 向量数据* @param field KNN字段名* @return KnnSearchResponse* @throws Exception*/public SearchResponse knnSearchTestTwo(String indexName, List<Float> vector, String field, List<String> list) throws Exception {ElasticsearchClient client = ESClientPool.getClient();KnnQuery knnQuery = KnnQuery.of(m -> m.field(field).queryVector(vector).numCandidates(100));SearchResponse<ObjectNode> response = client.search(s -> s.index(indexName).query(knnQuery._toQuery()).source(SourceConfig.of(sf -> sf.filter(f -> f.includes(list)))), ObjectNode.class);List<ObjectNode> result = new ArrayList<>();for (Hit<ObjectNode> hit : response.hits().hits()) {ObjectNode source = hit.source();source.put("score", hit.score());result.add(source);}log.info("SearchResponse: {}", JSON.toJSONString(result));ESClientPool.returnClient(client);return response;}/*** 混合查询测试** @param indexName 索引名称* @param searchText 查询文本* @param vector 向量* @param knnField KNN字段名* @return SearchResponse* @throws Exception*/public SearchResponse mixSearch(String indexName, String searchText, String searchField, List<Float> vector, String knnField, List<String> returnFields) throws Exception {ElasticsearchClient client = ESClientPool.getClient();MatchQuery searchTextQuery = new MatchQuery.Builder().field(searchField).query(searchText).build();KnnQuery knnQuery = new KnnQuery.Builder().field(knnField).queryVector(vector).numCandidates(100).build();// 创建must子句的bool查询,这里只有一个should子句BoolQuery boolQuery = new BoolQuery.Builder().must(searchTextQuery._toQuery()) // 必须满足的文本匹配.should(knnQuery._toQuery()) // 可以满足的向量相似性.build();SearchResponse<ObjectNode> response = client.search(s -> s.index(indexName).query(boolQuery._toQuery()).source(SourceConfig.of(sf -> sf.filter(f -> f.includes(returnFields)))), ObjectNode.class);ESClientPool.returnClient(client);return response;}

http://www.lryc.cn/news/376561.html

相关文章:

  • 被腰斩的颍川郡守赵广汉
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 目录管理器(200分) - 三语言AC题解(Python/Java/Cpp)
  • 关于自学\跳槽\转行做网络安全行业的一些建议
  • 计算机网络(1) OSI七层模型与TCP/IP四层模型
  • 认识QML
  • llama-factory微调chatglm3
  • 大文件上传实现
  • 为何Proteus用户争相拥抱SmartEDA?揭秘背后的强大吸引力!
  • 万界星空科技QMS质量管理介绍
  • 神经网络 torch.nn---nn.LSTM()
  • Web前端JSP软件:深度解析与探索之旅
  • 人生的乐趣,在于对真知的追求
  • IPython大揭秘:神奇技巧让你掌握无敌编程力量!
  • 逻辑卷管理器 (LVM) 简介
  • Swift开发——弱占用
  • 化工电力系统RFID无线测温技术的重要性。
  • Linux系统:线程互斥
  • 【网络协议栈】TCP/IP相关知识点收集
  • Java开发中的常用字段校验注解
  • 面试经验分享 | 24年6月某安全厂商HW面试经验
  • JSON学习
  • LabVIEW在中国航天中的应用
  • 编程思维的培养
  • Docker笔记-Debian容器内搭建ssh服务
  • 爬虫的法律风险是什么?以及合法使用爬虫技术的建议。
  • 微信小程序允许相机访问相册
  • AMEYA360 | 江苏润石最新发布12颗车规级模拟芯片
  • PHP表单设计:确保必需字段完整性的最佳实践
  • CentOS 7 安装部署Cassandra4.1.5
  • 【数据结构与算法】对称矩阵,三角矩阵 详解