`

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();
	}

 

 

 

 

 

 

分享到:
评论

相关推荐

    SQLite时间转化问题

    SQLite 时间转换问题 SQLite 中的日期和时间函数是数据库管理中非常重要的一部分,掌握这些函数可以帮助开发者更好地处理日期和时间的转换操作。下面是 SQLite 中五个时间函数的介绍: 1. date() 函数:该函数...

    sqlite库文件

    此外,还可以通过API来处理错误、监控数据库状态,并进行高级功能如fts(全文搜索)和虚拟表的设置。 总之,SQLite库文件为开发者提供了一套完整的工具集,使他们能够在各种应用场景下轻松地进行数据库操作,无论是...

    c#Winform 操作 Sqlite

    在本文中,我们将深入探讨如何使用C# Winform与SQLite数据库进行交互,包括数据库的增删改查操作、二进制文件的读写以及注册表的管理。这些知识点对于开发Windows桌面应用程序至关重要。 首先,SQLite是一种轻量级...

    sqlite-netFx35-binary.zip_sqlite_sqlite binary dll_sqlite-netFx

    6. **System.Data.SQLite.pdb**: 类似的,这是System.Data.SQLite.dll的调试符号文件,有助于开发者调试与.NET框架的SQLite组件相关的问题。 7. **testce.pdb**: testce应用程序的调试符号文件,便于在开发过程中...

    SQLite for .net

    7. **调试信息**: `System.Data.SQLite.pdb`是程序调试符号文件,它包含了调试信息,当使用调试器(如Visual Studio)时,可以帮助开发者追踪代码执行的具体位置,定位并解决问题。 综上所述,这个压缩包包含了一个...

    sqlite for .net 1.0.74.0

    6. **System.Data.SQLite.pdb** 和 **System.Data.SQLite.Linq.pdb**:这些都是调试符号文件,当使用调试器(如Visual Studio)时,它们会提供源代码级别的调试信息,帮助开发者追踪代码执行过程中的问题。...

    E4和SQLite3的嵌入式中文输入法的设计

    - **汉字匹配与显示**:结合SQLite3数据库查询功能,实现拼音到汉字的快速匹配与显示。 - **高级功能实现**:包括模糊匹配、联想查询、词频记忆、自定义词语等功能,以增强输入法的实用性和智能化水平。 #### 设计...

    给wince使用的sqlite3,包含c++封装及测试代码(使用vs2005编译)

    标签中的“unicode”指示这个SQLite3版本支持Unicode字符集,这意味着它可以处理多种语言和字符集的数据,为全球化应用程序提供了便利。Unicode是一种广泛采用的标准,用于表示世界上几乎所有的文字和符号,确保数据...

    SQLite 函数大全

    SQLite 函数大全 SQLite 函数大全提供了多种函数来实现不同的操作,以下是对每个函数的详细说明: 1. abs(X) 函数:返回参数 X 的绝对值。 2. coalesce(X,Y,…) 函数:返回第一个非空参数的副本。若所有的参数均...

    SQLite-Expert-Personal使用教程.docx

    SQLite-Expert-Personal是一款功能强大的图形化工具,用于管理和操作SQLite数据库。对于那些希望简化SQLite数据库管理任务的人来说,这款工具无疑是个福音。本教程旨在通过图文并茂的方式,帮助用户了解如何安装和...

    SQLiteManager

    这得益于其依赖的动态链接库文件,如sqlite3.dll和Devart.Data.SQLite.dll,这些文件提供了与SQLite数据库交互所需的接口和功能。 sqlite3.def是编译时定义的导出符号文件,用于在Windows平台上构建动态链接库。...

    Matlab读取SQLITE数据库.zip

    Matlab,全称MATrix LABoratory,是一种高级的编程环境,主要用于数值计算、符号计算、数据可视化以及算法开发等任务。当需要在Matlab中处理或分析数据库数据时,SQLite提供了一个高效且灵活的选择。本教程将详细...

    嵌入式数据库,sqlite使用,常用操作

    SQLite是一种流行的嵌入式数据库系统,它以轻量级、无需服务器进程和高度兼容SQL语法而闻名。在本文中,我们将深入探讨SQLite...在实际项目中,开发者可以根据需求灵活运用SQLite的各种功能,实现数据的持久化和管理。

    基于sqlite数据库以及深度学习lstm实现的检索式聊天机器人.zip

    在本项目实践中,我们探索了如何利用SQLite数据库和深度学习中的LSTM(长短时记忆网络)来构建一个检索式聊天机器人。这样的机器人能够理解并回应用户的输入,提供相关信息或者进行有意义的对话。以下是对这个项目的...

    Introduction to SQLite in Adobe AIR

    与传统的数据库系统相比,SQLite无需复杂的设置、配置或服务器支持,每个数据库都封装在一个单一的文件中,这使得它在各种应用程序中非常灵活且易于集成。 #### 二、为什么在Adobe AIR中使用SQLite? 在Adobe AIR...

    c# 连接sqlite案例成功

    在C#中连接SQLite数据库是开发桌面应用时常见的任务,SQLite是一种轻量级的数据库管理系统,无需服务器进程,可以直接在本地文件系统中存储数据。以下是一个详细的C#连接SQLite数据库的案例,包括所需的关键步骤、...

    浅谈SQLite时间函数的使用说明与总结分析

    strftime() 函数则允许使用特定的符号来格式化日期和时间,如 `%Y` 表示四位数的年份,`%m` 表示月份,`%d` 表示日期,`%H` 表示小时,`%M` 表示分钟,`%S` 表示秒等。 通过这些函数,我们可以轻松地完成日期和时间...

    Android基础编程-sqlite数据库介绍.pptx

    在Android基础编程中,SQLite数据库扮演着至关重要的角色。SQLite是一个开源、轻量级的嵌入式关系型数据库,特别适合于移动设备上的应用程序。它无需服务器进程,且占用资源极小,仅几百KB,却能提供完整的SQL语法...

    Python 进阶(五):数据库操作之 SQLite

    Python从2.5.x版本开始内置了sqlite3模块,允许开发者方便地与SQLite数据库进行交互。 2. 数据类型是理解数据库操作的基础。SQLite支持以下几种存储类型: - NULL:表示空值。 - REAL:浮点数类型,用于存储小数。 ...

Global site tag (gtag.js) - Google Analytics