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