短語匹配查詢

更新時間:
Copy as MD

短語匹配查詢(MatchPhraseQuery)類似於匹配查詢(MatchQuery),但是分詞後多個詞的位置關係會被考慮,只有分詞後的多個詞在行資料中以同樣的順序和位置存在時,才表示行資料滿足查詢條件。如果查詢列的分詞類型為模糊分詞,則使用MatchPhraseQuery可以實現比WildcardQuery更快的模糊查詢。

前提條件

參數

參數

說明

FieldName

查詢的列名,支援 TEXT 類型。

Text

查詢關鍵詞,即要匹配的值。

對於 TEXT 類型的列,關鍵詞會按照建立多元索引時指定的分詞器類型進行分詞。未指定分詞器時,預設使用單字分詞。

例如,查詢關鍵詞為"this is",可以匹配"...,this is tablestore"和"this is a table",但無法匹配"this table is ..."和"is this a table"。

Query

查詢類型,設定為 MatchPhraseQuery。

TableName

資料表名稱。

IndexName

多元索引名稱。

GetTotalCount

是否返回匹配的總行數。預設值為 false。設定為 true 時會影響查詢效能。

ColumnsToGet

返回的列,通過 ReturnAll、Columns 或 ReturnAllFromIndex 配置。

ReturnAll 預設為 false,僅返回主鍵列。如需返回其他列,可通過以下方式配置:

  • 設定 Columns,指定返回的列名。

  • 設定 ReturnAllFromIndex 為 true,返回多元索引中的所有列。

設定 ReturnAll 為 true,返回資料表中的所有列。

樣本

以下樣本查詢 Text_type_col 列中與短語"Tablestore SearchIndex"完全符合(要求詞序一致)的資料行。

/// <summary>
/// 查詢 Text_type_col 列與"Tablestore SearchIndex"短語匹配的資料行,並返回匹配的總行數。
/// </summary>
/// <param name="otsClient"></param>
public static void MatchPhraseQuery(OTSClient otsClient)
{
    var searchQuery = new SearchQuery();
    // 設定查詢類型為 MatchPhraseQuery。
    searchQuery.Query = new MatchPhraseQuery("Text_type_col", "Tablestore SearchIndex");
    // 返回匹配的總行數。
    searchQuery.GetTotalCount = true;
    var request = new SearchRequest(TableName, IndexName, searchQuery);
    // 通過 ColumnsToGet 指定返回的列。未設定時預設只返回主鍵列。
    request.ColumnsToGet = new ColumnsToGet()
    {
        // 返回多元索引中的所有列。
        ReturnAllFromIndex = true
        // 返回指定列。
        //Columns = new List<string>() { Long_type_col, Text_type_col, Keyword_type_col }
        // 返回所有列。
        //ReturnAll = true
    };

    var response = otsClient.Search(request);

    // TotalCount 為匹配的總行數,非本次返回的行數。
    Console.WriteLine("Total Count:" + response.TotalCount);
}

常見問題

相關文檔