Match phrase query is similar to match query, except match phrase query evaluates the positions of tokens. A row meets the query condition only when the order and positions of the tokens in the row match the order and positions of the tokens that are contained in the keyword. If the tokenization method for the column that you want to query is fuzzy tokenization, match phrase query is performed at a lower latency than wildcard query.

Prerequisites

  • A Tablestore client is initialized. For more information, see Initialization.
  • A data table is created. Data is written to the table.
  • A search index is created for the data table. For more information, see Create search indexes.

Parameters

ParameterDescription
tableNameThe name of the data table.
indexNameThe name of the search index.
offsetThe position from which the current query starts.
limitThe maximum number of rows that you want the current query to return.

To query only the number of rows that meet the query conditions without returning specific data, you can set limit to 0. This way, Tablestore returns the number of rows that meet the query conditions without specific data from the table.

queryTypeThe query type. To use match phrase query, set this parameter to TableStore.QueryType.MATCH_PHRASE_QUERY.
fieldNameThe name of the column that you want to match.

You can perform match phrase queries on TEXT columns.

textThe keyword that is used to match the column values when you perform a match phrase query.

If the column that you want to match is a TEXT column, the keyword is tokenized into multiple tokens based on the analyzer that you specify when you create the search index. By default, single-word tokenization is performed if you do not specify the analyzer when you create the search index.

For example, if you query the phrase "this is", "..., this is tablestore" and "this is a table" are returned. "this table is ..." and "is this a table" are not returned.

getTotalCountSpecifies whether to return the total number of rows that meet the query conditions. The default value of this parameter is false, which indicates that the total number of rows that meet the query conditions is not returned.

If you set this parameter to true, the query performance is compromised.

columnToGetSpecifies whether to return all columns of each row that meets the query conditions. You can configure returnType and returnNames for this parameter.
  • If you set returnType to TableStore.ColumnReturnType.RETURN_SPECIFIED, you need to configure returnNames to specify the columns that you want to return.
  • If you set the returnType parameter to TableStore.ColumnReturnType.RETURN_ALL, all columns are returned.
  • If you set the returnType parameter to TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX, all columns in the search index are returned. .
  • If you set the returnType parameter to TableStore.ColumnReturnType.RETURN_NONE, only the primary key columns are returned.

Examples

/**
 * Search the table for rows in which the value of Col_Text matches the entire phase "hangzhou shanghai" in order. 
 * Tablestore returns the number of rows that match the phrase and part of the matched rows in this query. 
 */
client.search({
    tableName: TABLE_NAME,
    indexName: INDEX_NAME,
    searchQuery: {
        offset: 0,
        limit: 10, // To query only the number of rows that meet the query conditions without returning specific data, you can set limit to 0. This way, Tablestore returns the number of rows that meet the query conditions without specific data from the table. 
        query: {// Set the query type to TableStore.QueryType.MATCH_PHRASE_QUERY. 
            queryType: TableStore.QueryType.MATCH_PHRASE_QUERY,
            query: {
                fieldName: "Col_Text", // Specify the column that you want to match. 
                text: "hangzhou shanghai" // Specify the keyword that you want to match. 
            }
        },
        getTotalCount: true // Specify whether to return the total number of rows that meet the query conditions. The default value of this parameter is false, which indicates that the total number of rows that meet the query conditions is not returned. 
    },
    columnToGet: { // Specify the columns that you want to return. You can configure the RETURN_SPECIFIED parameter to return specified columns, the RETURN_ALL parameter to return all columns, the RETURN_ALL_FROM_INDEX parameter to return all columns in the search index, or the RETURN_NONE parameter to return only the primary key columns. 
        returnType: TableStore.ColumnReturnType.RETURN_ALL
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});