通配符查询

通配符查询

更新时间:

通配符查询中,要匹配的值可以是一个带有通配符的字符串,目前支持星号(*)和问号(?)两种通配符。要匹配的值中可以用星号(*)代表任意字符序列,或者用问号(?)代表任意单个字符,且支持以星号(*)或问号(?)开头。例如查询“table*e”,可以匹配到“tablestore”。

如果查询的模式为 *word* (等价于SQL中的 WHERE field_a LIKE '%word%' ),则您可以使用性能更好的模糊查询,具体实现方法请参见 模糊查询 。该方案不会随数据量变大而导致性能下降。

说明

如果要实现NOT LIKE功能,则WildcardQuery需要和BoolQuery中的mustNotQueries结合使用。

注意事项

带有通配符的字符串长度不能超过32个字符。

接口

通配符查询的接口为 Search 或者 ParallelScan ,具体的Query类型为 WildcardQuery

参数

参数

描述

fieldName

列名称。

value

带有通配符的字符串,字符串长度不能超过32个字符。

query

设置查询类型为WildcardQuery。

getTotalCount

是否返回匹配的总行数,默认为false,表示不返回。

返回匹配的总行数会影响查询性能。

weight

查询权重,用于全文检索场景中的score排序。查询时指定列的算分权重,值越大,结果中分数的值会越大。取值范围为正浮点数。

使用此参数不会影响返回的结果数,只会影响返回的结果中的分数。

tableName

数据表名称。

indexName

多元索引名称。

columnsToGet

是否返回所有列,包含returnAll和columns设置。

returnAll默认为false,表示不返回所有列,此时可以通过columns指定返回的列;如果未通过columns指定返回的列,则只返回主键列。

当设置returnAll为true时,表示返回所有列。

使用方式

您可以使用控制台、命令行工具或者SDK进行通配符查询。进行通配符查询之前,您需要完成如下准备工作。

  • 使用阿里云账号或者使用具有表格存储操作权限的RAM用户进行操作。如果需要为RAM用户授权表格存储操作权限,请参见 通过RAM Policy为RAM用户授权 进行配置。

    使用SDK方式和命令行工具方式进行操作时,如果当前无可用AccessKey,则需要为阿里云账号或者RAM用户创建AccessKey。具体操作,请参见 创建AccessKey

  • 已创建数据表。具体操作,请参见 数据表操作

  • 已为数据表创建多元索引。具体操作,请参见 创建多元索引

  • 使用SDK方式进行操作时,还需要完成初始化Client。具体操作,请参见 初始化OTSClient

  • 使用命令行工具方式进行操作前,还需要完成下载并启动命令行工具,然后配置接入实例信息并选择要操作的表。具体操作,请参见 下载命令行工具 启动并配置 数据表操作

使用控制台

  1. 进入 索引管理 页签。

    1. 登录 表格存储控制台

    2. 在页面上方,选择资源组和地域。

    3. 概览 页面,单击实例名称或在 操作 列单击 实例管理

    4. 实例详情 页签下的 数据表列表 页签,单击数据表名称或在操作列单击 索引管理

  2. 索引管理 页签,单击目标多元索引 操作 列的 搜索

  3. 查询数据 对话框,查询数据。

    1. 系统默认返回所有列,如需显示指定属性列,关闭 获取所有列 并输入需要返回的属性列,多个属性列之间用半角逗号(,)隔开。

      说明

      系统默认会返回数据表的主键列。

    2. 根据需要选择逻辑操作符为 And O r或者 Not

      当选择逻辑操作符为 And 时,返回满足指定条件的数据。当选择逻辑操作符为 Or 时,如果配置了单个条件,则返回满足指定条件的数据;如果配置了多个条件,则返回满足任意一个条件的数据。当选择逻辑操作符为 Not 时,返回不满足指定条件的数据。

    3. 选择索引字段,单击 添加

    4. 设置索引字段的查询类型为 通配符查询(WildcardQuery) 和输入带通配符的值。

    5. 系统默认关闭排序功能,如需根据指定字段对返回结果进行排序,打开 是否排序 开关后,根据需要添加要进行排序的字段并配置排序方式。

    6. 系统默认关闭统计功能,如需对指定字段进行数据统计,打开 是否统计 开关后,根据需要添加要进行统计的字段和配置统计信息。

  4. 单击 确定

    符合查询条件的数据会显示在 索引管理 页签中。

使用命令行工具

通过命令行工具执行 search 命令使用多元索引查询数据。更多信息,请参见 多元索引

  1. 执行 search 命令使用search_index多元索引查询表中数据,并返回所有建立索引的列。

    search -n search_index --return_all_indexed
  2. 根据系统提示输入查询条件,示例如下:

    {
        "Offset": -1,
        "Limit": 10,
        "Collapse": null,
        "Sort": null,
        "GetTotalCount": true,
        "Token": null,
        "Query": {
            "Name": "WildcardQuery",
            "Query": {
                "FieldName": "col_keyword",
                "Value": "hang*u"
    }

使用SDK

您可以通过 Java SDK Go SDK Python SDK Node.js SDK .NET SDK PHP SDK 使用通配符查询。此处以Java SDK为例介绍通配符查询的使用。

以下示例用于使用通配符查询表中Col_Keyword列的值中匹配"hang*u"的数据。

/**
 * 使用通配符查询,查询表中Col_Keyword列的值中匹配"hang*u"的数据。
 * @param client
private static void wildcardQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    WildcardQuery wildcardQuery = new WildcardQuery(); //设置查询类型为WildcardQuery。
    wildcardQuery.setFieldName("Col_Keyword");
    wildcardQuery.setValue("hang*u"); //wildcardQuery支持通配符。
    searchQuery.setQuery(wildcardQuery);
    //searchQuery.setGetTotalCount(true); //设置返回匹配的总行数。
    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    //通过设置columnsToGet参数可以指定返回的列或返回所有列,如果不设置此参数,则默认只返回主键列。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); //设置为返回所有列。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); //设置为返回指定列。
    //searchRequest.setColumnsToGet(columnsToGet);
    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); //打印匹配到的总行数,非返回行数。
    System.out.println("Row: " + resp.getRows());
}

计费说明

使用VCU模式(原预留模式)时,使用多元索引查询数据会消耗VCU的计算资源。使用CU模式(原按量模式)时,使用多元索引查询数据会消耗读吞吐量。更多信息,请参见 多元索引计量计费

常见问题

相关文档