當使用萬用字元查詢時出現length of field value is longer than 32 for the [WILDCARD_QUERY] query異常時,您可以縮短查詢字串或使用短語匹配查詢。
現象
使用萬用字元查詢時出現如下異常:
length of field value is longer than 32 for the [WILDCARD_QUERY] query
解決方案
縮短查詢字串
縮短待查詢的字串,以確保其長度在32個字元以內。
基於分詞的萬用字元查詢
多元索引支援採用基於分詞的萬用字元查詢方式,以實現效能更優的模糊查詢。在使用基於分詞的萬用字元查詢方式時,查詢詞長度不受限制,但原文內容限制為最多1024字元或者漢字,超過此限制後將自動截斷,只保留前1024個字元或者漢字。
動態修改多元索引schema。
請根據業務影響評估修改目標列或添加虛擬列,並設定類型為分詞字串(Text)且分詞類型為模糊分詞(Fuzzy)。具體操作,請參見動態修改schema和虛擬列。
使用短語匹配查詢(MatchPhraseQuery)。
具體操作,請參見基於分詞的萬用字元查詢。
SQL萬用字元查詢情境
使用SQL查詢資料時,如果資料表存在多元索引,並且該多元索引包含SQL中涉及的所有資料列,則SQL引擎將自動選擇該多元索引進行資料查詢。在此情況下,執行SQL萬用字元查詢(如LIKE運算子結合萬用字元%),也將存在查詢詞長度限制(最長32個字元)。
您可以通過以下操作解決此問題。
動態修改多元索引schema。
請根據業務影響評估修改目標列或添加虛擬列,並設定類型為分詞字串(Text)且分詞類型為模糊分詞(Fuzzy)。具體操作,請參見動態修改schema和虛擬列。
建立多元索引的映射關係。
以下樣本用於為資料表example_table的多元索引example_table_index,建立多元索引映射關係example_table__example_table_index。
CREATE TABLE `example_table__example_table_index`(
`pk` MEDIUMTEXT,
`attr` MEDIUMTEXT,
`attr_virtual` MEDIUMTEXT #虛擬列
)
ENGINE='searchindex',
ENGINE_ATTRIBUTE='{"index_name":"example_table_index","table_name":"example_table"}';
在SQL語句中使用短語匹配查詢(TEXT_MATCH_PHRASE)。
以下樣本用於查詢多元索引映射關係example_table__example_table_index中虛擬列attr_virtual值匹配"tablestore is super cool!"字串的資料。
select * from example_table__example_table_index where TEXT_MATCH_PHRASE(attr_virtual, "tablestore is super cool!");