我已閱讀過很多文章,詢問是否可以在Android中完成基於SQLite的全文搜索,並且所有答案都指出Android內置的SQLite不允許自定義標記器。默認分詞器會考慮用空格或其他符號分隔的詞,但亞洲詞(如中文)需要其特殊分詞器,但Android不允許添加自定義分詞器。解決Android SQLite全文搜索亞洲文本
我讀過的帖子是多年前的。最近的Android版本有沒有更新?我剛剛搜索,沒有找到答案。
而我正在考慮解決問題。在將元組插入到FTS3/FTS4虛擬表中進行索引之前,我是否可以在每個詞之間人爲地添加空格,以便默認分詞器可以將每個亞洲「詞」視爲英語單詞?在執行查詢時,查詢字符串的功能相同,也添加了人造空間。
我在Linux上試過,看起來像是有效。例如,如果我不喜歡這樣,全文搜索是亞洲文本確定:
CREATE VIRTUAL TABLE mail USING fts3(subject, body);
INSERT INTO mail(docid, subject, body) VALUES(4, 'software feedback', '這 個 Bug 還 沒 有 解 決');
SELECT * FROM mail WHERE body MATCH '沒 有 解 決';
但有疑問的是,它是否將花費數據庫文件更多的存儲,因爲有雙用字符空間。它看起來像所謂的「虛擬表」不僅存儲生成的索引,而且還存儲原始文本。
我只是發現有FTS4稱爲「無內容FTS4表」和「外部內容FTS4表」的功能。無內容表只存儲索引而不存儲內容,外部內容表可以存儲獨立於虛擬表的內容。所以我認爲我可以用虛擬表格插入帶有人造空白的文本,並將確切的文本存儲在外部內容表中。這聽起來像一個很好的解決方案.... –