本文介紹使用多元索引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
  • 確保使用了正確的分詞器。更多信息,請參見分詞