elasticsearch 如何删除某字段中含有null的所有文档

本文介绍了如何在Elasticsearch中查询并删除特定字段为null的文档,通过结合查询与批量删除操作,逐步解决问题。过程中遇到504错误,通过调整scroll_size参数,最终成功删除500多万条数据。

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

具体就不说我遇到的场景了,主要是不好意思说。下面我直接讲一下我解决的过程吧。

首先也是google一下看有没有现成了,果然是有滴

详细可以查看: https://blog.youkuaiyun.com/zhang862520682/article/details/80333196

这篇文章说了如何查询出某个字段为空的文档,操作如下:

GET vas_user_tags/_search
{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "userid"
        }
      }
    }
  }
}

vas_user_tags是我的索引,实际场景中,替换成你们自己的索引即可

知道如何查询之后,在查看官方文档根据条件批量删除的部分

详细请查看: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

大致就解决了

操作如下:

POST vas_user_tags/_delete_by_query?scroll_size=5000
{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "userid"
        }
      }
    
在Java中使用Elasticsearch进行聚合操作,特别是想要找到某个字段的最大值,你可以使用`AggregationBuilders.max()`。首先,你需要连接到Elasticsearch服务器,并通过它的客户端API来进行查询。以下是一个基本示例: ```java import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.max.Max; public class ElasticsearchExample { private final Client client; // 初始化你的Elasticsearch客户端 public void findMaxValue(String indexName, String typeName, String fieldToAggregate) throws Exception { SearchRequest searchRequest = new SearchRequest(indexName); searchRequest.types(typeName); // 添加一个聚合,寻找指定字段的最大值 Max maxAggregation = AggregationBuilders.max(fieldToAggregate).field(fieldToAggregate).build(); // 定义搜索请求,包括查询条件(这里是匹配所有文档) SearchResponse searchResponse = client.prepareSearch() .setQuery(QueryBuilders.matchAllQuery()) .addAggregation(maxAggregation) .execute() .actionGet(); // 获取聚合结果 Max maxResult = searchResponse.getAggregations().get(fieldToAggregate); if (maxResult != null && maxResult.getValue() != null) { System.out.println("Field '" + fieldToAggregate + "'的最大值是: " + maxResult.getValue()); } else { System.out.println("未找到最大值"); } } } ``` 在这个例子中,`indexName`是索引名,`typeName`是类型名,`fieldToAggregate`是你想要查找最大值的那个字段名。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值