Spring Data Elasticsearch使用事项

本文介绍了如何在Elasticsearch中进行大数据量的条件删除,使用_delete_by_query方法,以及构建复杂的嵌套结构查询、无限制查询和模糊搜索(wildcardQuery)。还讨论了`track_total_hits`的使用和聚合查询的优化问题。
摘要由CSDN通过智能技术生成

增删改查


1.大数据量根据条件批量删除(一次删不干净)

/索引名称/_delete_by_query?slices=3&wait_for_completion=false&scroll_size=9000&conflicts=proceed

2.嵌套结构Nested构造查询条件(注意es版本)

type = FieldType.Nested

//1.假设索引结构为{
    "a1": {
        "b1": {
            "c1": "",
            "c2": ""
        },
        "b2": {}
    },
    "a2": {}
}
//2.需要a1.b1.c1='aa'的数据
//3.nestedQuery("a1",nestedQuery("a1.b1",QueryBuilders.boolQuery().must(QueryBuilders.termsQuery("a1.b1.c1", "aa")))))
boolQuery.must(QueryBuilders.nestedQuery(ESFieldName.BASE_TRANSACTION,
                    QueryBuilders.nestedQuery(ESFieldName.QUERY_TRANSACTION,
                            QueryBuilders.boolQuery()
                                    .must(QueryBuilders.termsQuery(ESFieldName.QUERY_TRANSACTION_SOURCE_ADDRESS, req.getAddress()))
                            ,org.apache.lucene.search.join.ScoreMode.None)
                    ,org.apache.lucene.search.join.ScoreMode.None));

3.查询无限制

添加track_total_hits:true

/索引名/_search/

{
    "track_total_hits": true,
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "aa": "1"
                    }
                },
                {
                    "range": {
                        "bb": {
                            "gte": "0",
                            "lte": "1"
                        }
                    }
                }
            ]
        }
    }
}

在查询中,如果.withAggregations注意agg分组结果的组的数量也是限制1w,记得打开限制进行统计

NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                    .withQuery(boolQuery).withTrackTotalHits(true)
                    .withAggregations(AggregationBuilders.terms(ApiStatisticsESField.ITEM_ID_GRP).field(ApiStatisticsESField.ITEM_ID).size(Integer.MAX_VALUE)
                            .subAggregation(AggregationBuilders.count(ApiStatisticsESField.TOTAL_COUNT).field(ApiStatisticsESField.ITEM_ID))
                            .order(BucketOrder.aggregation(ApiStatisticsESField.TOTAL_COUNT, true))
                    )
                    .build();

4.模糊搜索

type = FieldType.Wildcard

boolQuery.must(QueryBuilders.wildcardQuery("ids", "*" + 某变量 + "*"));

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值