使用匹配查询(TEXT_MATCH)或者短语匹配查询(TEXT_MATCH_PHRASE)条件作为SELECT语句中的WHERE子句,您可以使用SELECT语句通过多元索引查询表中匹配指定字符串的数据,实现全文检索功能。
前提条件
已创建多元索引并为要匹配的列设置了分词。具体操作,请参见创建多元索引。
关于分词的更多信息,请参见分词。
匹配查询
匹配查询采用近似匹配的方式查询表中的数据。对Text类型的列值和查询关键词会先按照设置好的分词器做切分,然后按照切分好后的词去查询。对于进行模糊分词的列,建议使用TEXT_MATCH_PHRASE实现高性能的模糊查询。
SQL表达式
TEXT_MATCH(fieldName, text, [options])
参数说明
参数
类型
是否必选
示例值
说明
fieldName
string
是
col1
要匹配的列。匹配查询可应用于Text类型。
text
string
是
"tablestore is cool"
查询关键词,即要匹配的值。
当要匹配的列为Text类型时,查询关键词会被分词成多个词,分词类型为创建多元索引时设置的分词器类型。如果创建多元索引时未设置分词器类型,则默认分词类型为单字分词。
例如当要匹配的列为Text类型时,分词类型为单字分词,则查询词为"this is",可以匹配到“...,this is tablestore”、“is this tablestore”、“tablestore is cool”、“this"、“is”等。
options
string
否
"or", "2"
匹配选项。包括如下选项:
operator:关系逻辑符,可选值包括OR和AND,默认值为OR。
minimum_should_match:最小匹配个数,默认值为1。
如果operator为OR,只有当某一行数据的fieldName列的值中至少包括最小匹配个数的词时,才表示行数据满足查询条件。
如果operator为AND,则只有分词后的所有词都在列值中时,才表示行数据满足查询条件。
返回值
返回值为Boolean类型,表示该行是否满足查询条件。取值为true时,表示满足查询条件;取值为false时,表示不满足查询条件。
示例
以下示例用于查询exampletable表中col1列值匹配"tablestore is cool"字符串至少2个分词的数据。
SELECT * FROM exampletable WHERE TEXT_MATCH(col1, "tablestore is cool", "or", "2")
以下示例用于查询exampletable表中col1列值匹配"tablestore is cool"字符串所有分词的数据。
SELECT * FROM exampletable WHERE TEXT_MATCH(col1, "tablestore is cool", "and")
短语匹配查询
短语匹配查询类似于TEXT_MATCH,但是分词后多个词的位置关系会被考虑,只有分词后的多个词在行数据中以同样的顺序和位置存在时,才表示行数据满足查询条件。
SQL表达式
TEXT_MATCH_PHRASE(fieldName, text)
参数说明
参数
类型
是否必选
示例值
说明
fieldName
string
是
col1
要匹配的列。匹配查询可应用于Text类型。
text
string
是
"tablestore is cool"
查询关键词,即要匹配的值。
当要匹配的列为Text类型时,查询关键词会被分词成多个词,分词类型为创建多元索引时设置的分词器类型。如果创建多元索引时未设置分词器类型,则默认分词类型为单字分词。关于分词的更多信息,请参见分词。
例如查询的值为“this is”,可以匹配到“...,this is tablestore”、“this is a table”,但是无法匹配到“this table is ...”以及“is this a table”。
返回值
返回值为Boolean类型,表示该行是否满足查询条件。取值为true时,表示满足查询条件;取值为false时,表示不满足查询条件。
示例
以下示例用于查询exampletable表中col1列值匹配"tablestore is cool"字符串的数据。
SELECT * FROM exampletable WHERE TEXT_MATCH_PHRASE(col1, "tablestore is cool")