為Text類型的欄位設定分詞類型後,系統會根據設定的分詞類型將可分詞的內容分成多個詞。非Text類型的欄位不能設定分詞類型。TEXT類型的欄位不支援排序和統計彙總。如果Text類型的欄位同時需要進行排序或統計彙總,可以通過虛擬列為Keyword類型實現。
背景資訊
對於Text類型欄位,常用於匹配查詢(MatchQuery)和短語匹配查詢(MatchPhraseQuery),少部分情境也會用到精確查詢(TermQuery)、多詞精確查詢(TermsQuery)、首碼查詢(PrefixQuery)、萬用字元查詢(WildcardQuery)等。
分詞類型
目前支援單字分詞、分隔字元分詞、最小數量語義分詞、最大數量語義分詞和模糊分詞5種分詞類型。
單字分詞(SingleWord)
單字分詞適用於漢語、英語、日語等所有語言文字。Text類型欄位的預設分詞類型為單字分詞。
設定分詞類型為單字分詞後,具體的分詞方式如下:
漢語會按照“字”切分。例如“杭州”會切分成“杭”和“州”,通過MatchQuery或MatchPhraseQuery查詢“杭”可以查詢到含有“杭州”內容的資料。
英文字母或數字會按照空格或標點符號切分。
當
caseSensitive
為false時,不區分大小寫,Table Store會將分詞後的英文字母全部轉換為小寫字母進行儲存。例如“Hang Zhou”會切分成“hang”和“zhou”,通過MatchQuery或MatchPhraseQuery查詢“hang”或“HANG”或“Hang”都能查詢到該行資料。
當
caseSensitive
為true時,區分大小寫,Table Store會將分詞後的英文字母區分大小寫進行儲存。例如“Hang Zhou”會切分成“Hang”和“Zhou”,通過MatchQuery或MatchPhraseQuery查詢“Hang”或“Zhou”都能查詢到該行資料。
對於數字和英文字母串連在一起的詞,例如商品型號等,也會按照空格或標點符號切分,但是預設情況下數字和英文不會拆分開。例如“iphone6”會拆分成“iphone6”,通過MatchQuery或MatchPhraseQuery查詢時,只有指定完整“iphone6”才能查詢到,使用“iphone”查詢不到。
如果需要將數字和英文拆分開,您可以設定delimitWord參數為true。此時“iphone6”會拆分成“iphone”和“6”,通過MatchQuery或MatchPhraseQuery查詢“iphone”和“6”都能查詢到該行資料。
單字分詞的參數說明請參見下表。
參數 | 說明 |
caseSensitive | 是否大小寫敏感。預設值是false,此時所有英文字母會轉換為小寫。 如果不需要系統自動將英文字母轉換為小寫字母,需要保持大小寫敏感,可以設定caseSensitive為true。 |
delimitWord | 對於英文和數字串連在一起的單詞,是否分割英文和數字。預設值是false,表示數字和英文不會拆分開。 如果需要將數字和英文拆分開,您可以設定delimitWord參數為true,此時“iphone6”會被拆分成“iphone”和“6”。 |
分隔字元分詞(Split)
Table Store提供了基於通用詞典的分詞,但是有些特殊行業需要一些自訂的辭典做分詞,為瞭解決此問題,Table Store提供了分隔字元分詞,也叫做自訂分詞,使用者先按照自己的方式分詞,再按照特定的分隔字元進行分隔後寫入Table Store。
分隔字元分詞適用於漢語、英語、日語等所有語言文字。
為Text類型欄位配置了分隔字元分詞後,會按照分隔字元delimiter指定值切分欄位值。例如欄位值為“羽毛球,乒乓球,饒舌”,分隔字元delimeter為英文逗號(,),則會切分為“羽毛球”、“乒乓球”和“饒舌”並建立索引,通過MatchQuery或MatchPhraseQuery查詢“羽毛球”、“乒乓球”、“饒舌”或“羽毛球,乒乓球”均可以查詢到該行資料。
分隔字元分詞的參數說明請參見下表。
參數 | 說明 |
caseSensitive | 是否大小寫敏感。預設是false,此時所有英文字母會轉換為小寫。 如果不需要系統自動將英文字母轉換為小寫字母,需要保持大小寫敏感,可以設定caseSensitive為true。 重要 從Table StoreJava SDK5.17.2版本開始支援此配置。 |
delimiter | 分隔字元,預設是空白字元,可以自訂分隔字元。
|
最小數量語義分詞(MinWord)
最小數量語義分詞適用於漢語,一般應用於全文檢索索引情境。
設定分詞類型為最小數量語義分詞後,系統按照語義對Text欄位內容分詞時,會將Text欄位內容切分成最小數量的語義詞。
最大數量語義分詞(MaxWord)
最大數量語義分詞適用於漢語,一般應用於全文檢索索引情境。
設定分詞類型為最大數量語義分詞後,系統會盡量多的分出語義詞,不同語義詞之間會有重疊,總長度累加後會大於原文長度,索引大小也會膨脹。
此種分詞類型的分詞後結果更多,查詢時命中的機率更大,但是索引大小會有比較大的膨脹。適合使用MatchQuery而非MatchPhraseQuery查詢,如果使用MatchPhraseQuery查詢,由於查詢關鍵詞中也會按照同樣的方式分詞,那麼位置資訊會重疊,就有可能導致搜尋不到。
模糊分詞(Fuzzy)
模糊分詞適用於漢語、英語、日語等所有語言文字,一般應用於常值內容較短情境,例如標題、電影名稱、書名、檔案名稱、目錄名等。
模糊分詞可用於以很低的延遲返回結果,比WildcardQuery效能更好,但是索引大小會有一定膨脹。
設定分詞類型為模糊分詞後,系統對常值內容進行Ngram分詞,結果介於minChars和maxChars之間。例如用在下拉提示等功能中。
要實現模糊查詢時,您必須在進行模糊分詞的列上使用MatchPhraseQuery,而不能使用其他Query。如果對該列有多種查詢需求,請使用虛擬列功能。關於虛擬列的具體操作,請參見虛擬列。
限制
當Text欄位的分詞類型為模糊分詞時,長度不能超過1024字元。如果超過長度限制,系統會將超過的字元截斷丟棄,只保留前1024個字元。
為了防止索引資料量過度膨脹,最大和最小字元切分單元的差值(maxChars-minChars)不能超過15。
參數
參數
說明
minChars
最小字元切分單元,即切分的字元組合中字元數量必須大於等於此值,預設值為1。
maxChars
最大字元切分單元,即切分的字元組合中字元數量必須小於等於此值,預設值為7。
caseSensitive
是否大小寫敏感。預設是false,此時所有英文字母會轉換為小寫。
如果不需要系統自動將英文字母轉換為小寫字母,需要保持大小寫敏感,可以設定caseSensitive為true。
重要從Table StoreJava SDK5.17.2版本開始支援此配置。
分詞類型對比
從幾個關鍵維度對不同分詞的比較資訊請參見下表。
對比項 | 單字分詞 | 分隔字元分詞 | 最小數量語義分詞 | 最大數量語義分詞 | 模糊分詞 |
索引膨脹 | 小 | 小 | 小 | 中 | 大 |
相關性影響 | 弱 | 弱 | 中 | 較強 | 較強 |
適用語言 | 所有 | 所有 | 漢語 | 漢語 | 所有 |
長度限制 | 無 | 無 | 無 | 無 | 1024字元 |
召回率 | 高 | 低 | 低 | 中 | 高 |