本文介绍使用多元索引Search接口查不到数据的现象、原因和解决方案。
现象
使用多元索引Search接口查询数据时,出现查不到数据问题。
原因
- 数据表中的数据未正确同步到多元索引。
- 数据表中的数据以异步方式同步到多元索引,所以多元索引中的数据存在一定延迟,增量数据同步延迟时间大部分在10秒以内,全量数据同步延迟时间与数据表的数据量成正比。
- 多元索引中的列名区分大小写,可能造成与数据表中的列名不匹配。例如数据表中列名为ColumnName,多元索引中的对应列名为columnname。
- 多元索引中列的数据类型与数据表中的数据类型不匹配。例如数据表中某列为Integer,多元索引中对应列的数据类型为Keyword。
说明 表格存储的Wide column模型是schema-free的存储结构,同一个属性列的值可以有多种数据类型,所以可能出现部分行未同步成功的情况。
- 多元索引中列的数据类型与数据表中的数据格式不匹配。例如数据表中某列数据类型为String,值为-91,100,多元索引中对应列的数据类型为Geopoint。
说明 多元索引中地理位置类型格式为"纬度,经度",且纬度范围为-90~+90,经度范围-180~+180,且顺序不能写反。
- 使用的查询方式错误。
- 多元索引中数据类型为Keyword的字段使用MatchQuery查询部分值。例如数据表中的数据为"abc",多元索引中对应列的数据类型为Keyword,查询条件为MatchQuery("ab"),由于Keyword是不可分词类型,无法使用MatchQuery匹配部分值。
- 查询条件中参数设置错误。例如数据表中的数据为"abc",多元索引中对应列的数据类型为Keyword,查询条件TermQuery("ab")。
- 多元索引中数据类型为Keyword的字段使用RangeQuery查询时条件设置问题。例如数据表中的数据为20,多元索引中对应列的数据类型为Keyword,查询条件为RangeQuery(>10)。
说明 RangeQuery中不同数据类型的比较规则为Keyword数据类型的值按照字典序比较,Long和Double数据类型的值按照大小比较。
- 分词器使用错误,例如数据表中的数据为"abcdefg",多元索引中对应列的数据类型为Text且设置分词器为单字分词,查询条件为MatchQuery("abcd")。