当使用多元索引Search接口查不到数据时,一般是由数据表中的数据未正确同步到多元索引或使用的查询方式错误导致的,请检查数据表中的数据是否已正确同步到多元索引以及使用的查询方式是否正确。
问题现象
使用多元索引Search接口查询数据时,出现查不到数据问题。
可能原因
原因1:数据表中的数据未正确同步到多元索引
情况1:数据还未同步到多元索引中。数据表中的数据以异步方式同步到多元索引,所以多元索引中的数据存在一定延迟。
情况2:多元索引中的列名区分大小写,可能造成与数据表中的列名不匹配。例如数据表中列名为ColumnName,多元索引中对应列名为columnname。
情况3:多元索引中列的数据类型与数据表中列的数据类型不匹配。例如数据表中某列的数据类型为Integer,多元索引中对应列的数据类型为Keyword。
说明表格存储的Wide column模型是schema-free的存储结构,同一个属性列的值可以有多种数据类型,所以可能出现部分行未同步成功的情况。
情况4:多元索引中列的数据类型与数据表中列的数据格式不匹配。例如数据表中某列的数据类型为String,列值为
-91,100
,多元索引中对应列的数据类型为Geopoint、Nested或Vector。说明多元索引中Geopoint的格式为
纬度,经度
,且纬度范围为-90~+90
,经度范围-180~+180
,且顺序不能写反。多元索引中Nested的格式为JSON数组,例如
[{"tagName":"tag1", "score":0.8}, {"tagName":"tag2", "score":0.2}]
。多元索引中Vector的格式为Float32数组,且数组长度必须与向量字段的维度配置一致,例如
[1,5.1,4.7,0.08]
的向量维度为4。
原因2:使用的查询方式错误
情况1:多元索引中数据类型为Keyword的列使用MatchQuery查询部分值。例如数据表中的列值为
"abc"
,多元索引中对应列的数据类型为Keyword,查询条件为MatchQuery("ab")
。由于Keyword是不可分词类型,无法使用MatchQuery匹配部分值。情况2:查询条件中参数设置错误。例如数据表中的列值为
"abc"
,多元索引中对应列的数据类型为Keyword,查询条件为TermQuery("ab")
。情况3:使用RangeQuery查询多元索引中Keyword类型的列时条件设置存在问题。例如数据表中的列值为20,多元索引中对应列的数据类型为Keyword,查询条件为
RangeQuery(>10)
。说明RangeQuery中不同数据类型的比较规则为Keyword数据类型的值按照字典序比较,Long和Double数据类型的值按照大小比较。
情况4:分词器使用错误。例如数据表中的列数据为
"abcdefg"
,多元索引中对应列的数据类型为Text且设置分词器为单字分词,查询条件为MatchQuery("abcd")
。
解决方案
处理数据表中的数据未正确同步到多元索引问题
确保数据表中数据已同步到多元索引。增量数据同步延迟时间大部分在3秒以内,全量数据同步延迟时间与数据表的数据量成正比。
确保创建多元索引时设置的列名和数据类型与数据表的对应关系正确,写入数据表中的数据格式与多元索引中的数据类型匹配。更多信息,请参见基础数据类型及映射、字符串类型、日期时间类型或数组和嵌套类型。
说明如果多元索引中的配置存在问题,请通过重新创建多元索引或动态修改schema功能进行修改。具体操作,请参见创建多元索引和动态修改schema。
使用向量检索功能时,确保多元索引中向量字段的属性(维度、数据类型和距离度量算法)和向量生成(embedded)系统中生成的向量属性一致。更多信息,请参见向量检索。
处理使用的查询方式错误问题