列存在性查詢

更新時間:
Copy as 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

是否返回所有列。取值:ReturnAllColumnsReturnAllFromIndex

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));
}

常見問題

相關文檔