sqlite - 为什么 sqlite fts5 Unicode61 Tokenizer 不支持 CJK(中文日文韩文)?
问题描述
我原以为Unicode61 Tokenizer可以支持CJK——中文日文韩文 我验证我的 sqlite 支持 fts5
sqlite> pragma compile_options;
BUG_COMPATIBLE_20160819
COMPILER=clang-9.0.0
DEFAULT_CACHE_SIZE=2000
DEFAULT_CKPTFULLFSYNC
DEFAULT_JOURNAL_SIZE_LIMIT=32768
DEFAULT_PAGE_SIZE=4096
DEFAULT_SYNCHRONOUS=2
DEFAULT_WAL_SYNCHRONOUS=1
ENABLE_API_ARMOR
ENABLE_COLUMN_METADATA
ENABLE_DBSTAT_VTAB
ENABLE_FTS3
ENABLE_FTS3_PARENTHESIS
ENABLE_FTS3_TOKENIZER
ENABLE_FTS4
ENABLE_FTS5
但令我惊讶的是,它根本找不到任何 CJK 词。这是为什么 ?
sqlite> CREATE VIRTUAL TABLE ft5_test USING fts5(content, tokenize = 'porter unicode61 remove_diacritics 1');
sqlite> INSERT INTO ft5_test values('为什么不支持中文 fts5 does not seem to work for chinese');
sqlite> select * from ft5_test where ft5_test = '中文';
sqlite>
sqlite> select * from ft5_test where ft5_test = 'Chinese';
为什么不支持中文 fts5 does not seem to work for chinese
- - - - - - - 更新 - - - - -
我花了很多时间来构建一个 icu 版本。我在这里分享了我的经验https://stackoverflow.com/a/52866566/301513
据我所知,使用 icu 版本是支持 CJK 的唯一方法,而 fts5 不支持 icu 分词器。
我把我的问题留在这里,以防其他人对这个问题有新的想法。
解决方案
推荐阅读
- coq - 如何在coq中制作反函数
- windows - 在 Powershell 中使用批处理式环境变量解释字符串
- cadence-workflow - 如果子工作流方法抛出异常,Java 客户端使用 Async.function 调用子工作流无法编译
- azure-devops - 如何将 Mark Down 样式添加到 Azure DevOps 网站
- http - 未处理的异常:在收到完整标头之前连接关闭无法解决此问题
- javascript - 将每个索引保存到每个按钮中
- html - 如何在没有模板引擎的情况下使用 NodeJS 在 HTML 中呈现动态内容
- firebase - 使用 firestore 上的实时更改侦听器更新 VueJS 上的列表
- css - 从 CSS 模块导入属性选择器
- java - 快速删除远程目录