短语匹配查询(MatchPhraseQuery)类似于匹配查询(MatchQuery),但是分词后多个词的位置关系会被考虑,只有分词后的多个词在行数据中以同样的顺序和位置存在时,才表示行数据满足查询条件。如果查询列的分词类型为模糊分词,则使用MatchPhraseQuery可以实现比WildcardQuery更快的模糊查询。
场景
MatchPhraseQuery可用于查找包含指定短语且短语顺序匹配的数据,MatchPhraseQuery结合分词使用能够实现全文检索,一般应用于大数据分析、内容搜索和个性化推荐等场景,例如在内容检索中查找包含指定短语的句子、在聊天记录中定位包含指定对话序列的消息。
功能概述
MatchPhraseQuery采用近似匹配的方式查询表中的数据,但是分词后多个词的位置关系会被考虑。例如Text类型字段的值是“杭州西湖风景区”,Query中查询关键字是“杭州风景区”,如果Query类型是MatchQuery,则可以匹配到该行数据,但是如果Query类型是MatchPhraseQuery,则不能匹配到该行数据,因为“杭州”和“风景区”在Query中的距离是0,但是在行数据中的距离是2(西湖两个字导致间隔距离是2)。
使用MatchPhraseQuery功能查询数据时,您需要设置要匹配的列和查询关键词。只有当查询关键词分词后的多个词在要匹配的列中以同样的顺序和位置存在时,才表示行数据满足查询条件。
查询数据时还支持配置查询权重、要返回的列、是否返回匹配的总行数、返回数据的排序方式等。
接口
短语匹配查询的接口为Search或者ParallelScan,具体的Query类型为MatchPhraseQuery。
参数
|
参数 |
说明 |
|
fieldName |
要匹配的列。 短语匹配查询可应用于Text类型。 |
|
text |
查询关键词,即要匹配的值。 当要匹配的列为Text类型时,查询关键词会被分词成多个词,分词类型为创建多元索引时设置的分词器类型。如果创建多元索引时未设置分词器类型,则默认分词类型为单字分词。关于分词的更多信息,请参见分词。 例如查询的值为“this is”,可以匹配到“...,this is tablestore”、“this is a table”,但是无法匹配到“this table is ...”以及“is this a table”。 |
|
query |
设置查询类型为matchPhraseQuery。 |
|
offset |
本次查询的开始位置。 |
|
limit |
本次查询需要返回的最大数量。 如果只为了获取行数,无需具体数据,可以设置limit=0,即不返回任意一行数据。 |
|
getTotalCount |
是否返回匹配的总行数,默认为false,表示不返回。 返回匹配的总行数会影响查询性能。 |
|
weight |
查询权重,用于全文检索场景中的score排序。查询时指定列的算分权重,值越大,结果中分数的值会越大。取值范围为正浮点数。 使用此参数不会影响返回的结果数,只会影响返回的结果中的分数。 |
|
tableName |
数据表名称。 |
|
indexName |
多元索引名称。 |
|
columnsToGet |
是否返回所有列,包含returnAll和columns设置。 returnAll默认为false,表示不返回所有列,此时可以通过columns指定返回的列;如果未通过columns指定返回的列,则只返回主键列。 当设置returnAll为true时,表示返回所有列。 |
注意事项
多元索引只提供最基础的 BM25 相关性,不提供自定义相关性能力。
使用方式
您可以使用控制台、命令行工具或者SDK进行短语匹配查询。
进行短语匹配查询之前,您需要完成如下准备工作。
使用阿里云账号或者具有表格存储操作权限的 RAM 用户进行操作。如果需要为 RAM 用户授权表格存储操作权限,请参见通过RAM Policy为RAM用户授权进行配置。
使用 SDK 方式和命令行工具方式进行操作时,如果当前无可用 AccessKey,则需要为阿里云账号或者 RAM 用户创建 AccessKey。
已创建数据表。
已为数据表创建多元索引。
使用 SDK 方式进行操作时,还需要完成初始化Tablestore Client。
使用命令行工具方式进行操作前,还需要完成下载并启动命令行工具,然后配置接入实例信息并选择要操作的表。具体操作,请参见下载命令行工具、启动并配置接入信息和数据表操作。
计费说明
使用 VCU 模式(原预留模式)时,使用多元索引查询数据会消耗 VCU 的计算资源。使用 CU 模式(原按量模式)时,使用多元索引查询数据会消耗读吞吐量。更多信息,请参见多元索引计量计费。