本文介绍使用多元索引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")。

解决方案

  • 确保创建多元索引时设置的列名和数据类型与数据表的对应关系正确,写入数据表中的数据格式与多元索引中的数据类型匹配。更多信息,请参见数据类型映射数组和嵌套类型
  • 确保数据表中数据已同步到多元索引。
  • 确保使用多元索引时选择了合适的查询方式和设置了正确的查询条件。更多信息,请参见使用SDK
  • 确保使用了正确的分词器。更多信息,请参见分词