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,表示不返回。 返回匹配的总行数会影响查询性能。 |
FieldName | 要匹配的字段。 |
ColumnsToGet | 是否返回所有列。包含ReturnAll和Columns以及ReturnAllFromIndex设置。 ReturnAll默认为false,表示不返回所有列。此时可以通过如下任一设置返回所需列。如果未设置Columns和ReturnAllFromIndex,则只返回主键列。
当设置ReturnAll为true时,表示返回所有列。 |
示例
/// <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));
}