使用多元索引的多条件组合查询功能进行数据查询时,请确保查询条件中的子查询条件不为空。如果子查询条件的参数均为空,则无需发起一次请求进行查询,您需要对子查询条件进行非空校验。
问题现象
使用多元索引的多条件组合查询功能进行数据查询时出现[bool_query] sub query must not be null
异常。报错示例如下:
com.alicloud.openservices.tablestore.TableStoreException: [bool_query] sub query must not be null
at com.alicloud.openservices.tablestore.core.CallbackImpledFuture.getResultWithoutLock(CallbackImpledFuture.java:107)
at com.alicloud.openservices.tablestore.core.CallbackImpledFuture.get(CallbackImpledFuture.java:89)
at com.alicloud.openservices.tablestore.SyncClient.waitForFuture(SyncClient.java:575)
at com.alicloud.openservices.tablestore.SyncClient.search(SyncClient.java:490)
at com.ckb.easy.goods.tablestore.util.TableStoreMultipleIndexUtils.search(TableStoreMultipleIndexUtils.java:205)
at com.ckb.easy.goods.tablestore.util.TableStoreMultipleIndexUtils.search(TableStoreMultipleIndexUtils.java:128)
at com.ckb.easy.goods.tablestore.util.TableStoreMultipleIndexUtils.search(TableStoreMultipleIndexUtils.java:96)
可能原因
查询条件中的子查询条件为空,未配置必选参数。
解决方案
您需要自行排查代码中查询条件的相关参数配置,请确保已正确配置查询条件中的所有子查询条件。更多信息,请参见多条件组合查询。
参考文档
由于使用多条件组合查询功能时查询条件中的子查询条件可以是任意一种Query类型,包括BoolQuery,您需要根据所需子查询条件的类型查看相应文档进行配置排查。例如,子查询条件为TermQuery,可参考精确查询文档进行配置。具体查询类型说明请参见下表。
如果自行排查代码后问题仍未解决,请加入钉钉群23307953(表格存储技术交流群-2)或36165029092(表格存储技术支持群-3)联系我们。
查询类型 | 说明 |
采用完整精确匹配的方式查询表中的数据,类似于字符串匹配。对于Text(分词字符串)类型字段,只要分词后有词条可以精确匹配即可。 | |
根据范围条件查询表中的数据。对于Text类型字段,只要分词后的词条中有词条满足范围条件即可。 | |
根据前缀条件查询表中的数据。对于Text类型字段,只要分词后的词条中有词条满足前缀条件即可。 | |
用近似匹配的方式查询表中的数据。对Text类型的列值和查询关键词会先按照设置好的分词器做切分,然后按照切分好后的词去查询。 | |
通配符查询中要匹配的值可以是一个带有通配符的字符串。 目前支持星号(*)和问号(?)两种通配符。要匹配的值中可以用星号(*)代表任意字符序列或者用问号(?)代表任意单个字符,且支持以星号(*)或问号(?)开头。 | |
类似于匹配查询,但是分词后多个词的位置关系会被考虑,只有分词后的多个词在行数据中以同样的顺序和位置存在时,才表示行数据满足查询条件。 如果查询列的分词类型为模糊分词,则使用短语匹配查询可以实现比通配符查询更快的模糊查询。 | |
也叫NULL查询或者空值查询,一般用于判断稀疏数据中某一行的某一列是否存在,例如查询所有数据中address列不为空的行。 如果需要查询某一列为空,则选择操作符为Not且字段的查询类型为列存在性查询。 | |
类似于精确查询,但是多词精确查询可以指定多个查询关键词,查询匹配这些词的数据。多个查询关键词中只要有一个词精确匹配,该行数据就会被返回,等价于SQL中的In。 | |
查询条件包含一个或者多个子查询条件,根据子查询条件来判断一行数据是否满足查询条件。 每个子查询条件可以是任意一种查询类型。 | |
地理位置查询 | 地理位置查询包括距离查询、矩形查询和多边形查询三种查询方式。只有当所选字段的数据类型为地理位置时才能使用地理位置查询。 |
查询嵌套类型字段中子行的数据。只有当所选字段的数据类型为嵌套类型时才能使用嵌套类型查询。 选择嵌套类型字段后,需要选择子行并配置字行的查询类型和值。 |