阿里云 TableStore 多元索引多条件查询

今天分享一下阿里云 TableStore的多元索引多条件查询,这里有个深坑,就是表格存储,如果要实现多条件查询,姿势不对,可能查不到你要的数据,是需要特别注意的。

 

 

举个例子,我们先看sql

 

select * from tableA where uid=? and category = ? order by register_time desc, bpart asc

在TableStore里面,我们要怎么写呢?先看代码

     List<Query> conditions = new ArrayList<>();

        SearchQuery searchQuery = new SearchQuery();

        conditions.add(QueryBuilders.term("uid", uid).build());
        conditions.add(QueryBuilders.term("category", ds).build());

        BoolQuery boolQuery = new BoolQuery();

        boolQuery.setMustQueries(conditions);



        searchQuery.setSort(new Sort(Arrays.asList(
                new FieldSort("register_time", SortOrder.DESC),
                new FieldSort("bpart", SortOrder.ASC)
        )));


        searchQuery.setQuery(boolQuery);
        SearchRequest searchRequest = new SearchRequest(TABLE_NAME, GLOBAL_INDEX_NAME, searchQuery);

        SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
        columnsToGet.setReturnAll(true); //设置为返回所有列。
        searchRequest.setColumnsToGet(columnsToGet);


        SearchResponse resp = syncClient.search(searchRequest);

然后解释

先建一个conditions 的List, 因为查询条件是And 关系,所以放到一个List里面

然后向里面添加查询条件,用QueryBuilder.term快速 添加 查询的  key, value

两个条件加了之后,我们创建一个  布尔查询条件,它的作用是把两个,或者多个条件 ,当 与  关系合并查询

 

通过setMustQuries, 把条件List整合在一起。

也就是说必须满足这多个条件

 

接下来,就是设定排序规则,setSort

然后进行搜索查询

 

syncClient是创建的 client 实例,调用search方法查询。

 

这段实例代码,展示了比较优雅的查询方法,要点在于先建一个List包含待查询条件。 你可以通过各种if else判断,来决定你要查询的条件有几个。

 

然后QueryBuilders.term方法,是快速添加查询条件的方法。灵活使用,能让你的编码减少很多。可读性变的更好。

 

SQL肯定是非常好的,但是用好TableStore也不难

分类: 编程语言 标签: 阿里云 TableStore 索引 查询 发布于: 2020-12-03 11:03:39, 点击数: