列存在性查询

更新时间:
复制 MD 格式

ExistsQuery也叫NULL查询或者空值查询,一般用于判断稀疏数据中某一行的某一列是否存在。例如查询所有数据中address列不为空的行。

说明
  • 要对Nested字段进行列存在性查询(ExistsQuery)时,请使用嵌套类型查询(NestedQuery)进行嵌套。

  • 如果需要查询某一列为空,则ExistsQuery需要和BoolQuery中的mustNotQueries结合使用。

  • 以下情况会认为某一列不存在,以city列为例说明。

    • city列在多元索引中的数据类型为keyword(或其他基础类型),如果数据表中某行数据不存在city列,则多元索引认为该行数据的city列不存在。

    • city列在多元索引中的数据类型为keyword(或其他基础类型)数组,如果数据表中某行数据的city列为空数组,即"city" = "[]",则多元索引认为该行数据的city列不存在。

前提条件

参数

参数

说明

TableName

数据表名称。

IndexName

多元索引名称。

Query

查询类型。设置为 existsQuery。

GetTotalCount

是否返回匹配的总行数。默认值为 false。设置为 true 时会降低查询性能。

FieldName

要查询的字段名称。

ColumnsToGet

是否返回所有列。取值:ReturnAll、Columns、ReturnAllFromIndex。

ReturnAll 默认为 false,仅返回主键列。如需返回其他列,可通过以下方式配置:

  • 设置 Columns,指定返回的列名。

  • 设置 ReturnAllFromIndex 为 true,返回多元索引中的所有列。

设置 ReturnAll 为 true,返回数据表中的所有列。

示例

以下示例查询 pk0 列值不为空的行。

/// <summary>
/// 使用列存在性查询,查询表中pk0列的值不为空的数据。
/// </summary>
/// <param name="otsClient"></param>
public static void ExistsQuery(OTSClient otsClient)
{
    ExistsQuery existsQuery = new ExistsQuery
    {
        FieldName = "pk0"
    };

    SearchQuery searchQuery = new SearchQuery
    {
        Query = existsQuery,
        GetTotalCount = false
    };

    SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    SearchResponse searchResponse = otsClient.Search(searchRequest);

    Console.WriteLine(JsonConvert.SerializeObject(searchResponse));
}

常见问题

相关文档