Elasticsearch常用函数

本文详细介绍了如何使用Elasticsearch的高阶API进行文档插入、获取、存在判断、删除、更新、批量操作、查询、异步处理以及条件构造查询。涵盖索引、搜索、筛选等关键操作,是Elasticsearch开发者必备技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

插入文档

IndexRequest request = new IndexRequest("索引").id("id值").source(Map数据);
RestHighLevelClient.index(request, RequestOptions.DEFAULT);

获取一个文档

GetRequest getRequest = new GetRequest("索引", "id值");
RestHighLevelClient.get(getRequest, RequestOptions.DEFAULT);

判断文档是否存在

GetRequest getRequest = new GetRequest("索引", "id值");
// 只是判断是否存在,禁止以下两个,可不管
getRequest.fetchSourceContext(new FetchSourceContext(false));	// 禁止获取_source
getRequest.storedFields("_none_");	// 禁止获取存储字段
RestHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);

删除文档

DeleteRequest deleteRequest = new DeleteRequest("索引", "id值");
client.delete(deleteRequest, RequestOptions.DEFAULT);

更新文档

UpdateRequest request = new UpdateRequest("索引", "id值").doc(Map数据);
RestHighLevelClient.update(request, RequestOptions.DEFAULT);

批量更新(批量操作)(增删改)

BulkRequest request = new BulkRequest();
request.add(new IndexRequest("索引").id("id值1").source(XContentType.JSON, "field", "foo", "user", "lucky"));
request.add(new IndexRequest("索引").id("id值2").source(XContentType.JSON, "field", "bar", "user", "Jon"));
request.add(new DeleteRequest("索引", "id值"));
request.add(new UpdateRequest("索引", "id值").doc(XContentType.JSON, "other", "test"));
RestHighLevelClient.bulk(request, RequestOptions.DEFAULT);

批量查询

MultiGetRequest request = new MultiGetRequest();
request.add(new MultiGetRequest.Item("索引", "id值1"));
request.add(new MultiGetRequest.Item("索引", "id值2"));
request.add(new MultiGetRequest.Item("索引", "id值3"));
RestHighLevelClient.mget(request, RequestOptions.DEFAULT);

异步操作

ActionListener<SearchResponse> listener = new ActionListener<SearchResponse>() {
    @Override
    public void onResponse(SearchResponse searchResponse) {
        // 查询成功
    }

    @Override
    public void onFailure(Exception e) {
        // 查询失败
    }
};
RestHighLevelClient.indexAsync(request, RequestOptions.DEFAULT, listener);

条件构造查询

// 大致使用
SearchRequest request = new SearchRequest(索引);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.xxx());
request.source(searchSourceBuilder);
RestHighLevelClient.search(request, RequestOptions.DEFAULT, listener);

// 1.搜索请求(列举常用)
SearchRequest request = new SearchRequest(索引);	
request.types(类型);
request.types();
request.source(搜索源生成器);  //搜索源生成器 --> SearchSourceBuilder
request.source();

// 2.搜索源生成器(列举常用)
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.from(开始索引);		// LIMIT ?
searchSourceBuilder.size(查询数量);		// LIMIT x,?
searchSourceBuilder.query(查询生成器);	// 查询生成器 --> QueryBuilders
searchSourceBuilder.sort("key",SortOrder.排序规则);	// 多个排序就构建多个sort,按顺序执行
searchSourceBuilder.sort(SortBuilders.fieldSort("key").order(SortOrder.排序规则));

// 3.查询生成器(列举常用)
QueryBuilders;
// 3.1 复合过滤器(列举常用)
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(查询生成器);	// AND
boolQueryBuilder.should(查询生成器);	// OR
boolQueryBuilder.mustNot(查询生成器);// NOT
boolQueryBuilder.filter(查询生成器);
// 3.2 Ids查询器(列举常用)
IdsQueryBuilder idsQueryBuilder = QueryBuilders.idsQuery();
idsQueryBuilder.addIds(String ids...);
idsQueryBuilder.types(String types...);
// 3.3 范围查询器(列举常用)
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(key);
rangeQueryBuilder.gt(数值);	// 大于
rangeQueryBuilder.gte(数值);	// 大于等于
rangeQueryBuilder.lt(数值);	// 小于
rangeQueryBuilder.lte(数值);	// 小于等于
// 3.4 正则表达式查询器(列举常用)
RegexpQueryBuilder regexpQueryBuilder = QueryBuilders.regexpQuery(key,正则表达式);
// 3.5 模糊查询器(列举常用)	模糊查询,我们输入字符的大概,ES就可以去根据输入的内容大概去匹配一下结果
FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery(key, 模糊值);
// 3.6 通配符查询器(列举常用)	*:通配符	?:占位符
WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery(key,value);
// 3.7 前缀查询器(列举常用) 前缀查询,可以通过一个关键字去指定一个Field的前缀,从而查询到指定的文档
PrefixQueryBuilder prefixQueryBuilder = QueryBuilders.prefixQuery(key,前缀值);
// 3.8 高层查询器(列举常用) 自动根据查询的字段类型采用不同的查询方式
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(key,valye);
// 3.8.1 and或者or查询器(列举常用)
Operator operator = QueryBuilders.matchQuery(key,valye).operator();
// 3.9 查询所有(列举常用)
MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
// 3.10 全值查询器(列举常用)全值匹配,搜索之前不会对搜索的关键字进行分词,直接去分词库中匹配
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery(key,value);
// 3.11 全值查询器(和termQuery差不多)(value是可变参数,value间是or连接,相当于in(value))(列举常用)
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery(key,value1,value2...);
### MinIO 常用函数及其实现 MinIO 是一种高性能的对象存储解决方案,兼容 Amazon S3 API。它支持多种操作,包括文件上传、下载、删除以及元数据管理等。以下是常用函数的功能说明和示例: #### 1. 文件上传 (`PutObject`) `PutObject` 函数用于将文件上传至指定的桶中。该函数接受目标路径、本地文件流以及其他可选参数。 ```java // 使用 MinIO SDK 进行文件上传 minioClient.putObject( PutObjectArgs.builder() .bucket("my-bucketname") // 存储桶名称 .object("my-objectname") // 对象名称 .stream(inputStream, size, -1) // 输入流及相关大小 .build()); ``` 此代码片段展示了如何通过 `PutObject` 方法将文件上传到名为 `"my-bucketname"` 的存储桶中[^1]。 --- #### 2. 文件下载 (`GetObject`) `GetObject` 函数允许从 MinIO 下载文件并将其保存为本地文件或读取其内容。 ```java try (InputStream stream = minioClient.getObject( GetObjectArgs.builder() .bucket("my-bucketname") .object("my-objectname") .build())) { Files.copy(stream, Paths.get("/path/to/save/file"), StandardCopyOption.REPLACE_EXISTING); } ``` 上述代码实现了从 MinIO 中获取对象并将之写入本地磁盘的操作。 --- #### 3. 列举文件列表 (`ListObjects`) `ListObjects` 可以用来列举某个存储桶中的所有文件或者特定前缀下的文件集合。 ```java Iterable<Result<Item>> results = minioClient.listObjects( ListObjectsArgs.builder() .bucket("my-bucketname") .prefix("myprefix/") .recursive(true) .build()); for (Result<Item> result : results) { Item item = result.get(); System.out.println(item.objectName()); } ``` 这段代码可以枚举存储桶下具有特定前缀的所有对象,并打印它们的名字。 --- #### 4. 删除单个文件 (`RemoveObject`) 如果需要移除某一个单独的文件,则可以通过调用 `RemoveObject` 来完成这一需求。 ```java minioClient.removeObject( RemoveObjectArgs.builder() .bucket("my-bucketname") .object("my-objectname") .build()); ``` 这里展示的是如何利用 MinIO 提供的方法来执行简单的文件删除动作。 --- #### 5. 批量删除多个文件 (`RemoveObjects`) 对于多文件的同时清理工作来说,`RemoveObjects` 更加适合场景化的需求。 ```java List<DeleteObject> objects = new ArrayList<>(); objects.add(new DeleteObject("objectname1")); objects.add(new DeleteObject("objectname2")); minioClient.removeObjects( RemoveObjectsArgs.builder() .bucket("my-bucketname") .objects(objects) .build()); ``` 上面的例子描述了一个批量删除的过程,其中包含了两个待删的目标项。 --- #### 6. 获取预签名 URL (`getPresignedObjectUrl`) 为了提供临时访问权限给未授权用户,可以生成带有时间限制的有效链接。 ```java String url = minioClient.getPresignedObjectUrl( GetPresignedObjectUrlArgs.builder() .method(Method.GET) .bucket("my-bucketname") .object("my-objectname") .expiry(2, TimeUnit.HOURS) .build()); System.out.println(url); // 输出URL地址 ``` 这个例子解释了怎样创建有效期两小时内的 GET 请求类型的资源定位符[^2]。 --- #### 7. 数据搜索与查询(集成 Elasticsearch) 当涉及到复杂的查询条件时,通常会借助外部工具如 Elasticsearch 来增强 MinIO 的能力。下面给出了一种基础架构方式: - **步骤一**: 将新加入的数据同步至 ES; - **步骤二**: 构建索引映射关系表; - **步骤三**: 查询返回结果集再反向关联回原始位置。 具体实现略显繁琐,在真实环境里还需要考虑诸如安全性验证等问题[^3]。 --- #### 总结 以上即为一些常见的 MinIO 操作接口介绍及其应用场景举例说明。每部分都尽可能详尽地阐述了各自的特点与优势所在。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值