当使用通配符查询时出现length of field value is longer than 32 for the [WILDCARD_QUERY] query异常时,您可以缩短查询字符串或使用短语匹配查询。
现象
使用通配符查询时出现如下异常:
length of field value is longer than 32 for the [WILDCARD_QUERY] query
解决方案
缩短查询字符串
缩短待查询的字符串,以确保其长度在32个字符以内。
基于分词的通配符查询
多元索引支持采用基于分词的通配符查询方式,以实现性能更优的模糊查询。在使用基于分词的通配符查询方式时,查询词长度不受限制,但原文内容限制为最多1024字符或者汉字,超过此限制后将自动截断,只保留前1024个字符或者汉字。
动态修改多元索引schema。
请根据业务影响评估修改目标列或添加虚拟列,并设置类型为分词字符串(Text)且分词类型为模糊分词(Fuzzy)。具体操作,请参见动态修改schema和虚拟列。
使用短语匹配查询(MatchPhraseQuery)。
具体操作,请参见基于分词的通配符查询。
SQL通配符查询场景
使用SQL查询数据时,如果数据表存在多元索引,并且该多元索引包含SQL中涉及的所有数据列,则SQL引擎将自动选择该多元索引进行数据查询。在此情况下,执行SQL通配符查询(如LIKE
运算符结合通配符%
),也将存在查询词长度限制(最长32个字符)。
您可以通过以下操作解决此问题。
动态修改多元索引schema。
请根据业务影响评估修改目标列或添加虚拟列,并设置类型为分词字符串(Text)且分词类型为模糊分词(Fuzzy)。具体操作,请参见动态修改schema和虚拟列。
创建多元索引的映射关系。
以下示例用于为数据表example_table
的多元索引example_table_index
,创建多元索引映射关系example_table__example_table_index
。
CREATE TABLE `example_table__example_table_index`(
`pk` MEDIUMTEXT,
`attr` MEDIUMTEXT,
`attr_virtual` MEDIUMTEXT #虚拟列
)
ENGINE='searchindex',
ENGINE_ATTRIBUTE='{"index_name":"example_table_index","table_name":"example_table"}';
在SQL语句中使用短语匹配查询(TEXT_MATCH_PHRASE)。
以下示例用于查询多元索引映射关系example_table__example_table_index中虚拟列attr_virtual值匹配"tablestore is super cool!"字符串的数据。
select * from example_table__example_table_index where TEXT_MATCH_PHRASE(attr_virtual, "tablestore is super cool!");