`

SQLite的全文搜索与符号化问题

 
阅读更多

20130213更正:

下面的'"明 日 *"'应改为'明 日 *'(把双层引号改为单层引号),将获得更多匹配结果。

 

20130321:

还可以在where条件中加入like或glob(同时使用match和like)以减少结果数量(或者加入其它条件) 

 

Android自带的sqlite3通过fts3(是fulltext search engine 3的缩写?)模块支持全文搜索。但官方文档说只支持三种符号化,而且只支持完全和前缀匹配(也就是说,分割的符号只能完全或前方匹配搜索字符串),默认是不支持后缀和中缀搜索。如果要解决这个问题,需要做一些特殊处理。我看到网上的讨论,大概有以下方法:

(1)创建一个反转字符串的列,就可以实现后缀匹配

(2)使用类似MeCab的分词库,把目标串符号化。

不过我觉得这两种方法都是有一定的限制。方法二虽然比较好,但我觉得还是有点复杂。

我觉得符号化(分词)不一定要很精确,比如”我是中国人“只要符号化为”我 是 中 国 人 “就可以了。

所以我在创建符号化列时使用这样的逻辑(用Java处理):

 

 

	private static String tokenize(String str) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < str.length(); i++) {
			sb.append(str.charAt(i));
			sb.append(' ');
		}
		return sb.toString();
	}

 

假设创建的符号化列为word_tokenize,搜索字符串为”明日“,那么查询语句是(注意搜索的非英文字符串”明日“也要被符号化)

 

 

select word, meaning, dict_id from words where word_tokenize match '"明 日 *"' order by rowid;

 

不过这样做的坏处是很明显的,因为英文单词会被分割成可以任意连结,而且搜索速度会减慢。

 

或者这样符号化会好些——

 

 

	private static String tokenize(String str) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			sb.append(c);
			if (c > 256) {
				sb.append(' ');
			}
		}
		return sb.toString();
	}

 

 

 

 

 

 

分享到:
评论

相关推荐

    PureBasic 4.51 x86

    - 象BASIC关键字一样完全支持Win32 API - 汇编程序内嵌 - 为快速编译使用固定文件预编译结构 - 结构化 CLI编译器 - 高效率,包括大量关键词,联机帮助 - 支持XML,正则表达式,ftp ,http,....... - 友好的系统,简单而...

    【最新版】modeler030_ess_mac_en.zip navicat-data-modeler-essentials: 3.0.8【亲测可用】最好的数据

    可视化数据库模型,以便您可以看到诸如属性,关系,索引,唯一性,注释和其他对象之类的元素如何相互关联,而无需显示实际数据。Navicat Data Modeler支持不同的数据库:直接连接,ODBC,MySQL,MariaDB,Oracle,...

    【最新版】modeler030_en.dmg navicat-data-modeler: 3.0.8【亲测可用】最好的数据库设计工具

    可视化数据库模型,以便您可以看到诸如属性,关系,索引,唯一性,注释和其他对象之类的元素如何相互关联,而无需显示实际数据。Navicat Data Modeler支持不同的数据库:直接连接,ODBC,MySQL,MariaDB,Oracle,...

    SeLite:自动启用数据库的Web应用程序导航

    它允许数据库驱动的操作用于功能测试,测试数据与已测试的应用程序隔离用于非测试目的,例如自动化管理或数据挖掘。 提高Selenium的生产率。 SeLite启用通过跨脚本共享功能实现高重用增强表达语法测试数据库(与...

    基于socket的网络聊天室python源码+详细项目说明(支持多人群聊、私聊).zip

    2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为...

    易语言程序免安装版下载

    重新创建并初始化()”方法。 8. 修改应用接口支持库,增强“取快捷方式目标”命令功能,可以获取目标、参数、启始位置、图标、运行方式、快捷键、备注等信息。 9. 修改扩展界面支持库三,解决高级选择夹会导致所在...

    papers:论文ᵞ—科学论文讨论板

    安装安装python3,flask,Pillow,sqlite3和ghostscript 运行'git submodule init && git submodule update'来获取所需的库文件(MathJax和已标记) ./clear.sh将初始化sqlite数据库,pdf的存储和日志目录将...

    C-Lua5-Cell-Machine:CLua5 c-算法

    符号Lua-变量,函数,函数回调,表,表达式 C算法和容器 单元数据结构和算法 uSockets网络和事件 cJSON和protobuf-c sqlite3 基本结构 细胞阵列 细胞阵列结构和算法 清单和过程 蜂窝列表处理 树与逻辑 蜂窝搜索和...

    预兆2

    omen2将采用一组类和一个数据库,并将它们与迁移支持链接在一起。 omen2允许用户: 将创建的对象序列化到数据库 查询数据库并返回对象,而不是行 查询相关对象 跨多个线程访问/锁定/更新符号对象 回滚异常的更改 ...

    commits.lol:开发人员说最胆怯的话

    提交在每次加载页面时都会随机化,但是您也可以使用表情符号按钮来随机化提交消息! :face_with_tears_of_joy: =有趣的提交 :pile_of_poo: =与便便相关的提交 :smiling_face_with_halo: =寻求帮助的承诺 :face...

    易语言540个易模块

    逍遥带符号液晶 新编码转换大全 新注册系统热键1.0 信息提示框控件(Tip) 星光灭绝1.0 形象大使1.0 修改菜单1.0版 寻找磁盘文件 寻找注册表 循环冗余校验 Y 压缩加密文件夹 压缩文件夹 液晶控件模块 液晶模块...

    1345个易语言模块

    Sqlite 数据库加强.ec Sqlite表管理.ec SQL到文本.ec SQL基本语句.ec sql操作模块.ec SQL 数据库操作模块.ec SQL数据库最新操作模块.ec Star.ec StarlightExtinction.ec status.ec status2.ec Super-EC.ec ...

    1350多个精品易语言模块

    Sqlite 数据库加强.ec Sqlite表管理.ec SQL到文本.ec SQL基本语句.ec sql操作模块.ec SQL 数据库操作模块.ec SQL数据库最新操作模块.ec Star.ec StarlightExtinction.ec status.ec status2.ec Super-EC.ec ...

    易语言模块914个

    Sqlite数据库加强.ec Sqlite表管理.ec SQL到文本.ec SQL基本语句.ec sql操作模块.ec SQL数据库操作模块.ec SQL数据库最新操作模块.ec Star.ec StarlightExtinction.ec status.ec status2.ec Super-EC.ec...

    易语言700模块打包

    和是几与谁最大(1.0).zip 回调函数1.0(1.0).zip 好用的东西(1.0).zip 好色按钮(1.0).zip 好色按钮 2.0(2.0).zip 彗星模块(1.3).zip 汉字查询3.1版(1.0).zip 汉字助记码(1.0).zip 汉字处理模块(1.0).zip ...

    790个易模块打包下载-2

    逍遥带符号液晶.ec 新编码转换大全.ec 信息提示框控件(Tip).ec 星光灭绝1.0.ec 行数.ec 形象大使1.0.ec 修改菜单1.0版.ec 寻找磁盘文件.ec 寻找注册表.ec 循环冗余校验.EC 压缩加密文件夹.ec 压缩文件夹....

    790个易模块-3

    逍遥带符号液晶.ec 新编码转换大全.ec 信息提示框控件(Tip).ec 星光灭绝1.0.ec 行数.ec 形象大使1.0.ec 修改菜单1.0版.ec 寻找磁盘文件.ec 寻找注册表.ec 循环冗余校验.EC 压缩加密文件夹.ec 压缩文件夹....

Global site tag (gtag.js) - Google Analytics