-
2022-02-24 10:45:28
有时候搜索多个索引的时候,有的索引不存在,我希望忽略调传入参数中的不存在的索引。可以添加如下参数,这样ES不会返回错误信息。
SearchRequest searchRequest = new SearchRequest(indices, searchSourceBuilder); searchRequest.indicesOptions(IndicesOptions.lenientExpandOpen());
更多相关内容 -
Elasticsearch RestClient 操作 Elasticsearch基本流程
2021-07-15 16:42:44org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.4.2</version> </dependency> 1.1、解决与SpringBoot自带...1、导入依赖
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.4.2</version> </dependency>
1.1、解决与SpringBoot自带依赖的冲突
<elasticsearch.version>7.4.2</elasticsearch.version>
2、编写配置、容器中注入RestHighLevelClient
import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.boot.SpringBootConfiguration; import org.springframework.context.annotation.Bean; @SpringBootConfiguration public class GulimallElasticSearchConfig { @Bean public RestHighLevelClient esRestClient() { RestClientBuilder builder = null; builder = RestClient.builder(new HttpHost("192.168.56.10", 9200, "http")); RestHighLevelClient client = new RestHighLevelClient(builder); return client; } }
3、请求拦截设置
public static final RequestOptions COMMON_OPTIONS; static { RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder(); // builder.addHeader("Authorization", "Bearer " + TOKEN); // builder.setHttpAsyncResponseConsumerFactory( // new HttpAsyncResponseConsumerFactory // .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024)); COMMON_OPTIONS = builder.build(); }
-
ES RESTClient查询、排序、高亮显示 java实现
2022-02-26 18:32:341.8 7.12.1 org.elasticsearch.client elasticsearch-rest-high-level-client 7.12.1 查询的基本步骤是: 1. 创建 SearchRequest 对象 2. 准备 Request.source() ,也就是 DSL 。 ① QueryBuilders 来构建查询条件 ...<properties> <java.version>1.8</java.version> <elasticsearch.version>7.12.1</elasticsearch.version> </properties> <dependencies> <!--elasticsearch依赖包--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.12.1</version> </dependency> </dependencies>
查询的基本步骤是:
1. 创建 SearchRequest 对象2. 准备 Request.source() ,也就是 DSL 。① QueryBuilders 来构建查询条件② 传入 Request.source() 的 query() 方法3. 发送请求,得到结果4. 解析结果(参考 JSON 结果,从外到内,逐层解析)@Test void testMatchAllHotelIndex() throws IOException { // 1.创建Request对象 SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL request.source().query(QueryBuilders.matchAllQuery()); // 3.发起请求 testFindHotelIndex(request); } @Test void tesMatchHotelIndex() throws IOException { // 1.创建Request对象 SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL request.source().query(QueryBuilders.matchQuery("all","如家")); // 3.发起请求 testFindHotelIndex(request); } /** * @description ES通用数据查询 * @param request: */ public void testFindHotelIndex(SearchRequest request) throws IOException { // 3.发起请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //System.out.println(response); //4.解析结果 SearchHits hits = response.getHits(); //4.1查询总条数 long value = hits.getTotalHits().value; System.out.println("es搜索到:" + value + "条数据"); //4.2查询的结果数组 SearchHit[] hitsHits = hits.getHits(); for (SearchHit e : hitsHits) { //4.3 得到source String json = e.getSourceAsString(); //4.4 打印 System.out.println("json = " + json); HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class); System.out.println("hotelDoc = " + hotelDoc.toString()); } }
其它查询变化不大
private RestHighLevelClient client; @BeforeEach void setUp() { this.client = new RestHighLevelClient(RestClient.builder( HttpHost.create("http://192.168.2.199:9200") )); } @AfterEach void tearDown() throws IOException { this.client.close(); } @Test void testClient() { System.out.println(client); } /** * @description matchAll 查询所有 */ @Test void testMatchAllHotelIndex() throws IOException { // 1.创建Request对象 SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL request.source().query(QueryBuilders.matchAllQuery()); // 3.发起请求 testFindHotelIndex(request); } /** * @description multiMatch多字段查询 */ @Test void testMultiMatchHotelIndex() throws IOException { // 1.创建Request对象 SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL request.source().query(QueryBuilders.multiMatchQuery("如家","name","business","brand")); // 3.发起请求 testFindHotelIndex(request); } /** * @description match 单字段查询 */ @Test void tesMatchHotelIndex() throws IOException { // 1.创建Request对象 SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL request.source().query(QueryBuilders.matchQuery("all","如家")); // 3.发起请求 testFindHotelIndex(request); } /** * @description 精确查询常见的有term查询和range查询,同样利用QueryBuilders实现 * term 词条查询 * range 范围查询 */ @Test void testTermHotelIndex() throws IOException { // 1.创建Request对象 SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL request.source().query(QueryBuilders.termQuery("city","上海")); // 3.发起请求 testFindHotelIndex(request); } /** * @description 精确查询常见的有term查询和range查询,同样利用QueryBuilders实现 * term 词条查询 * range 范围查询 */ @Test void testRangeHotelIndex() throws IOException { // 1.创建Request对象 SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL request.source().query(QueryBuilders.rangeQuery("price").gte(100).lte(500)); // 3.发起请求 testFindHotelIndex(request); } /** * @description DSL查询语法-bool查询 复合查询 */ @Test void testBoolHotelIndex() throws IOException { // 1.创建Request对象 SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL // 2.1创建布尔查询 BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); //2.2 添加must条件 2.3添加filter条件 boolQuery.must(QueryBuilders.termQuery("city", "上海")) .filter(QueryBuilders.rangeQuery("price").lte(600)); //boolQuery.filter(QueryBuilders.rangeQuery("price").lte(250)); request.source().query(boolQuery); // 3.发起请求 testFindHotelIndex(request); } /** * @description Sort size from分页查询 */ @Test void testSortHotelIndex() throws IOException { int page = 1,size = 5; // 1.创建Request对象 SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL request.source().query(QueryBuilders.matchAllQuery()) .sort("price", SortOrder.ASC).from((page-1)*size).size(size); // 3.发起请求 testFindHotelIndex(request); } /** * @description 高亮显示 * term 词条查询 * range 范围查询 */ @Test void testHighLightHotelIndex() throws IOException { // 1.创建Request对象 SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL request.source().query(QueryBuilders.termQuery("city","上海")); //2.2 高亮查询 request.source().highlighter(new HighlightBuilder().field("name"). requireFieldMatch(false)); // 3.发起请求 testFindHotelIndex(request); } /** * @description ES通用数据查询 * @param request: */ public void testFindHotelIndex(SearchRequest request) throws IOException { // 3.发起请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //System.out.println(response); //4.解析结果 SearchHits hits = response.getHits(); //4.1查询总条数 long value = hits.getTotalHits().value; System.out.println("es搜索到:" + value + "条数据"); //4.2查询的结果数组 SearchHit[] hitsHits = hits.getHits(); for (SearchHit e : hitsHits) { //4.3 得到source String json = e.getSourceAsString(); //4.4 打印 //System.out.println("json = " + json); //反序列化 HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class); //获取高亮结果 Map<String, HighlightField> highlightFields = e.getHighlightFields(); if(!CollectionUtils.isEmpty(highlightFields)){ //根据字段名获取高亮结果 HighlightField highlightField = highlightFields.get("name"); if (highlightField != null) { //获取高亮值 String name = highlightField.getFragments()[0].string(); //覆盖高亮结果 hotelDoc.setName(name); } } System.out.println("hotelDoc = " + hotelDoc.toString()); } }
算法控制实现(广告排名靠前)
//2.算法控制 FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery( //原始数据查询,相关性算分的查询 boolQueryBuilder, new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{ //其中一个function score 元素 new FunctionScoreQueryBuilder.FilterFunctionBuilder( //过滤条件 QueryBuilders.termQuery("isAD", true), //算分函数 ScoreFunctionBuilders.weightFactorFunction(10) ) }); request.source().query(functionScoreQueryBuilder);
-
readm-data-elasticsearch(轻量级elasticsearch restClient方式连接框架) 阿里云es (spring-data团队暂时还...
2019-08-16 08:36:59readm-data-elasticsearch(轻量级elasticsearch restClient方式连接框架) (spring-data团队暂时还没有兼容 本框架提供临时解决方案) 项目地址:https://github.com/readmlll/readm-data-elasticsearch readm-data-...readm-data-elasticsearch(轻量级elasticsearch restClient方式连接框架)
(spring-data团队暂时还没有兼容 本框架提供临时解决方案)项目地址:https://github.com/readmlll/readm-data-elasticsearch
readm-data-elasticsearch(轻量级elasticsearch restClient方式连接框架)
轻量级elasticsearch restClient方式连接框架/阿里云elasticsearch连接框架
(实测阿里云es 6.7.0没问题,注意开启公网访问,用户名密码,以及设置好白名单)
基于spring,(spring-data-es部分注解)、elasticsearch高低版本client
封装的rest版本es客户端. 仿照spring-data 一贯的使用方式,只需少量代码即可转换transport连接方式到restClient连接
实现全部ElasticsearchRepository接口
优点:
目前最新spring-data-es 是3.1.0 Elasticsearch模板还是不支持restClient连接 (据说3.2.0 会支持)
使用本框架 小项目,轻量级使用es的项目,快速方便的转换transport连接方式到restClient连接,还是使用spring-data-es的习惯,一套代码两种方式连接方式可跑。
我自己的是从自己搭建的es迁移到阿里云es 6.7.0 ,阿里云不支持transport 常用操作的封装,创建文档,查询总数,批量增加修改,批量删除,高亮显示
缺点:
自由度不够,更多属性需要自己修改源码。
于spring-data-es不同点总结: 1.实体对象需要继承EsEntity,必须有id字段且其为string类型 且该字段需要标注@Field注解。 2.仓库对象 不再使用继承接口,需要继承EsRepository类。 3.没有动态生成方法。 但支持ElasticsearchRepository所有接口声明的方法
关于反射的冗余:
本来是想写工具类的,所以EsRestClient有反射代码的冗余 介意的话自己修改。
有点功能洁癖写着写着 还是当demo级别框架写 我自己是使用编译jar包 在别的项目中引入本"demo框架" 当做正常框架使用。 你可以抽离代码放到你的项目中,也可以选择和我一样编译jar,引入依赖。 我会在github上提供一份编译好的jar
本框架主要类目录结构 (详细目录结构在下方)
项目示例和框架源码目录结构:
common_parent为框架父级总管理项目 data为次级管理项目 es-rest为框架项目
paper_site为 使用本框架示例 打开idea编译好common_parent项目 安装jar到本地
再打开paper_site项目(添加好依赖) 填写好yml配置信息 运行readm.paper.PaperApplicationTests.contextLoads 测试方法, 即可自动创建es文档 和相关测试代码 (注意打开相关注释等等)
文档对象声明 和 其字段声明仓库对象定义
测试仓库方法
-
ElasticSearch RestClient索引管理
2019-12-27 14:16:55@SpringBootTest @RunWith(SpringRunner.class) public class Searchtest { @Autowired RestHighLevelClient client; @Autowired RestClient restClient; ... -
spring boot 集成 elasticsearch restClient 相关配置
2020-04-15 14:31:07最近公司领导让我研发使用rabbitMq 通过 logstash 将数据传输保存到elasticsearch的需求。 工作刚刚忙完,公司用的主要框架是spring boot。 下面跟小伙伴们分享一下,spring boot 集成 elasticsearchs 的详细配置... -
Elasticsearch之使用RestClient实现_sql查询
2021-08-01 13:17:35版本:elasticsearch 7.13.4 1. 声明 当前内容主要为使用RestClient以及使用sql方式进行查询操作,主要参考官方文档 主要使用_sql方式进行查询 2. 主要demo public static void main(String[] args) throws ... -
【ElasticSearch】RestClient和ElasticsearchTemplate实现高亮查询
2019-11-28 16:15:47(Es版本,6.5.4) 前提准备,首先建立mapping POST http://47.101.167.46:9200/hello_es/doc/_mapping { "properties": { "name": { "type": "text", "analyzer":"ik_max_word", ... -
Springboot 使用 RestClient 集成低版本 elasticsearch
2020-09-08 23:09:03Springboot 使用 RestClient 集成低版本 elasticsearch 1.引入依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId&... -
elasticsearch 工具 RESTClient
2018-07-10 17:39:15上篇文章写了如何在win 下安装es,犹豫是初学者,想知道怎么来操作查了写文档,网上推荐了几...现在教大家如何用他去调用我们的elasticsearch ,大神请略。OK,我们简单的试一个。接下来用命令创建个index。请求方法... -
springboot中使用elasticsearch客户端RestClient
2021-05-10 19:30:03<artifactId>elasticsearch-rest-high-level-clientartifactId> <version>7.3.0version> dependency> 配置application.yml testelasticsearch: elasticsearch: hostlist: 192.168.247.130:9200 #多个结点用逗号分隔 ... -
聊聊Elasticsearch RestClient的DeadHostState
2019-05-17 22:03:00elasticsearch-7.0.1/client/rest/src/main/java/org/elasticsearch/client/RestClient.java public class RestClient implements Closeable { //...... /** * Select nodes to try and sorts them so that ... -
聊聊Elasticsearch RestClient的RequestLogger
2019-05-16 13:59:46本文主要研究一下Elasticsearch RestClient的RequestLogger RequestLogger elasticsearch-7.0.1/client/rest/src/main/java/org/elasticsearch/client/RequestLogger.java final class RequestLogger { private ... -
elasticsearch java 基于 RestClientAPI 的增删改查
2020-08-04 15:32:53RestClient 类客户端 5种请求方式 public class EsRestClient { private static final String PUT = "PUT"; private static final String POST = "POST"; private static final String GET = "GET"; ... -
Elasticsearch Java Rest Client快速上手(附完整示例代码包)
2020-08-03 10:49:52本文介绍Elasticsearch的Java Client的原理、版本兼容性以及使用示例,帮助您快速使用Java客户端与Elasticsearch集群进行交互,完成检索、分析等相关业务。 Transport Client迁移至REST Client Transport Client随着... -
Elastic Search RestClient 报异常:listener timeout after waiting for [30000] ms
2019-07-09 17:27:09java.io.IOException: listener timeout after waiting for [30000] ms at org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:660) at org.elasticsearch.client.RestClient.p... -
Elasticsearch Rest-Client使用教程
2018-11-04 13:50:56Rest-Client使用教程DSL ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。介绍详解案例之Rest-Client REST客户端,通过http与集群交互,用户自定义... -
【Elasticsearch】学习笔记-p3(RestClient操作文档)
2021-11-18 17:24:32文章目录RestClient操作文档1.初始化RestClient2.索引库操作2.1 创建索引库2.2 删除索引库2.3 判断索引库是否存在...在elasticsearch提供的API中,与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中 -
es (Elasticsearch)--Java REST Client解析
2019-04-01 21:28:06ES提供了两种java的API对数据进行ES集群操作:TransportClient,Java REST Client。但是有以下几点需要注意: 计划在7中删除TransportClient客户端,并在8中完全删除它。 Java REST Client客户端目前支持更常用的... -
elasticsearch restclient bulk批量索引数据,可回滚返回失败数据及原因(仅供参考)
2019-08-27 10:50:18自用代码,不喜勿喷,感谢指正。(仅供参考,仅供参考,仅供参考。) maven: <!-- 引入es依赖包 --> <...org.elasticsearch.client</groupId> <artifactId>elasticse... -
JavaRestClient操作Elasticsearch批量新增文档
2020-11-25 16:27:50导包 导包可以根据 文档 里导入依赖 这里就不写依赖了 批量新增文档 package com.leyou.es;...import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkResponse; import -
Elasticsearch 分布式搜索引擎 -- RestClient操作索引库
2022-04-01 00:12:06Elasticsearch 分布式搜索引擎 -- RestClient操作索引库 -
06-ES的RestClient(操作文档)
2022-02-13 22:48:07我们要将数据库的数据查询出来,写入elasticsearch中。 索引库实体类 数据库查询后的结果是一个Hotel类型的对象。结构如下: @Data @TableName("tb_hotel") public class Hotel { @TableId(type = IdType.INPUT) ... -
RestClient实现Elasticsearch的简单操作
2022-03-27 13:05:23RestClient client = EsConfig.initClient(); Response response = client.performRequest(getRequest); client.close(); System.out.println(EntityUtils.toString(response.getEntity())); } /** * 查询所有的... -
05-ES的RestClient(操作索引库)
2022-02-13 22:47:26官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html 其中的Java Rest Client又包括两种: Java Low Level Rest Client Java High Level Rest Client 这里使用的是Java HighLevel ...