相关疑难解决方法(0)

Android中使用的SQLite版本?

Android中使用的SQLite版本是什么?

原因:我想知道如何处理模式迁移.较新的SQLite版本支持"ALTER TABLE"SQL命令,这将节省我不得不复制数据,删除表,重新创建表和重新插入数据.

database migration sqlite schema android

266
推荐指数
4
解决办法
9万
查看次数

Android中的全文搜索示例

我很难理解如何在Android上使用全文搜索(FTS).我已经阅读了关于FTS3和FTS4扩展SQLite文档.而且我知道可以在Android上进行.但是,我很难找到任何我能理解的例子.

基本数据库模型

SQLite数据库表(已命名example_table)有4列.但是,只有一列(已命名text_column)需要为全文搜索编制索引.每行text_column包含长度从0到1000字不等的文本.总行数大于10,000.

  • 您将如何设置表和/或FTS虚拟表?
  • 你将如何执行FTS查询text_column

补充说明:

  • 因为只需要索引一列,所以仅使用FTS表(和删除example_table)对于非FTS查询来说效率低下.
  • 对于这样大的表,存储text_columnFTS表中的重复条目是不合需要的.这篇文章建议使用外部内容表.
  • 外部内容表使用FTS4,但在Android API 11之前不支持 FTS4 .答案可以假设API> = 11,但是评论支持较低版本的选项会很有帮助.
  • 更改原始表中的数据不会自动更新FTS表(反之亦然).在这个基本示例中,不需要在答案中包含触发器,但仍然会有所帮助.

sqlite android full-text-search

85
推荐指数
1
解决办法
3万
查看次数

Android上的SQLite是否为FTS启用了ICU标记器?

就像标题所说:我们可以使用...USING fts3(tokenizer icu th_TH, ...).如果可以,是否有人知道所支持的区域设置,以及它是否因平台版本而异?

sqlite android locale full-text-search tokenize

7
推荐指数
1
解决办法
2312
查看次数

为什么sqlite fts5 Unicode61 Tokenizer不支持CJK(中文日文韩文)?

我原以为Unicode61 Tokenizer可以支持 CJK --中文 日语 韩语\n我验证我的 sqlite 支持 fts5

\n\n
sqlite> pragma compile_options;\nBUG_COMPATIBLE_20160819\nCOMPILER=clang-9.0.0\nDEFAULT_CACHE_SIZE=2000\nDEFAULT_CKPTFULLFSYNC\nDEFAULT_JOURNAL_SIZE_LIMIT=32768\nDEFAULT_PAGE_SIZE=4096\nDEFAULT_SYNCHRONOUS=2\nDEFAULT_WAL_SYNCHRONOUS=1\nENABLE_API_ARMOR\nENABLE_COLUMN_METADATA\nENABLE_DBSTAT_VTAB\nENABLE_FTS3\nENABLE_FTS3_PARENTHESIS\nENABLE_FTS3_TOKENIZER\nENABLE_FTS4\nENABLE_FTS5\n
Run Code Online (Sandbox Code Playgroud)\n\n

但令我惊讶的是它根本找不到任何中日韩单词。这是为什么 ?

\n\n
sqlite> CREATE VIRTUAL TABLE ft5_test USING fts5(content, tokenize = \'porter unicode61 remove_diacritics 1\');\nsqlite> INSERT INTO ft5_test values(\'\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x88\xe4\xb8\x8d\xe6\x94\xaf\xe6\x8c\x81\xe4\xb8\xad\xe6\x96\x87 fts5 does not seem to work for chinese\');\nsqlite> select * from ft5_test where ft5_test = \'\xe4\xb8\xad\xe6\x96\x87\';\nsqlite>\nsqlite> select * from ft5_test where ft5_test = \'Chinese\';\n\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x88\xe4\xb8\x8d\xe6\x94\xaf\xe6\x8c\x81\xe4\xb8\xad\xe6\x96\x87 fts5 does not seem to work for chinese\n
Run Code Online (Sandbox Code Playgroud)\n\n

- - - - - - - 更新 - …

sqlite unicode full-text-search fts5

6
推荐指数
0
解决办法
1431
查看次数

BreakIterator如何在Android中运行?

我正在Android中创建自己的文本处理器(一个自定义垂直脚本TextView for Mongolian).我想我必须自己找到所有的断线位置,以便我可以实现换行,但后来我发现了BreakIterator.这似乎找到了各种语言中的字符,单词,行和句子之间的所有可能的中断.

我正在努力学习如何使用它.该文件是超过平均水平有帮助,但它仍然难以从只是阅读理解.我还找到了一些教程(见这里,这里这里),但他们缺乏我正在寻找的输出的完整解释.

我正在添加这个Q&A风格的答案,以帮助自己学习如何使用BreakIterator.

除了Java之外,我正在制作这个Android标签,因为它们之间显然存在一些差异.此外,Android现在支持ICUBreakIterator,未来的答案可能会解决这个问题.

java android word-wrap breakiterator

5
推荐指数
1
解决办法
1394
查看次数

ios应用程序用icu编译sqlite fts,但是当我输入一个像“z”这样的字母时它不能得到完美的答案

在sqlite中我:

  1. 执行一个 create virtual MyTable (tokenize =icu ,id text,subject text,abstract text)
  2. 然后成功insert info MyTable (id,subject,abstract) values (?,?,?) 所以我有行???????fmowomrogmeog?wfomgomrg????erz

当我执行select id from MyTable where MyTable match ‘z*’它不返回任何东西?每当我搜索单个字母时它什么都不返回。但是,如果我搜索“m”或“??” 或'?'?它有效。

我知道 sqlite 只支持前缀,所以我使用的是 ICU。我犯了一个错误吗?

请注意,我已经查看了 Foxmail 上的源代码,在我看来,我可以搜索“、”、“f”等。

sqlite icu ios

4
推荐指数
1
解决办法
754
查看次数