通配符查询

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

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

说明

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

前提条件

参数

参数

描述

fieldName

列名称。

value

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

query

设置查询类型为WildcardQuery。

getTotalCount

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

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

weight

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

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

tableName

数据表名称。

indexName

多元索引名称。

columnsToGet

是否返回所有列,包含returnAllcolumns设置。

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

当设置returnAlltrue时,表示返回所有列。

示例

以下示例用于使用通配符查询表中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());
}

常见问题

相关文档