sqlite全文查询配置到使用全过程

      SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

      Google为SQLite贡献了一些资源以实现帮助。在版本3.3.8中第一次实现全文检索。此版本提供的功能可以创建一个依赖于外部延伸的虚拟表:在这里,全文搜索运算法则可用于任何虚拟表内的文本列。在PHP 5.3.0中,对应的支持只被默认的PDO和SQLite3激活。较早版本的PHP可以使用PECL 的SQLite3扩展库。

  创建一个搜索索引通常情况如下:

  • 把文本分解成记号。

  • 转换为小写字母。

  • 确定根词。

  • 建立索引。

  设置好一切

  在默认情况下,SQLite提供了两个基本的分词器,Simple和Porter。它们可以控制字的分开方式。Simple根据空格和标点符号将文本分解成不同的记号。Porter是专为英文使用而设计,它可以将大量的文字扩展化解为基础形式。例如,condolidate,consolidated,和consolidating这一类词语都会被转变成consolid。

  遗憾的是,SQLite目前还没有取消停用词。所以常用词,例如,the,of和to仍位于索引内。这会极大地扩充索引的范畴并减缓搜索速度。最简单的解决办法是,在按下确认检索之前手动除去停用词。

      首先搭建一个测试环境我们有LINUX系统下编译安装sqlite-amalgamation-3.6.18.tar.gz

下载sqlite最新版本

$ wget http://www.sqlite.org/sqlite-amalgamation-3.6.18.tar.gz

解压缩

$ tar zxvf sqlite-amalgamation-3.6.18.tar.gz

$ cd sqlite-3.6.18/


配置编译sqlite
$ CFLAGS="-DSQLITE_ENABLE_FTS3=1" ./configure

$ make

$ make install

完成


查看版本
$ sqlite3 --version

创建一个sqlite数据库文件
$ sqlite3 dbdate.db
SQLite version 3.6.18
Enter ".help" for instructions
Enter SQL statements terminated with a ";"

创建一个虚表
sqlite> CREATE VIRTUAL TABLE recipe USING fts3(name, ingredients);

插入记录信息

sqlite> INSERT INTO recipe VALUES ('broccoli stew', 'broccoli peppers cheese tomatoes' );

sqlite> INSERT INTO recipe VALUES ('pumpkin stew', 'pumpkin onions garlic celery');

sqlite> INSERT INTO recipe VALUES ('broccoli pie', 'broccoli cheese onions flour');

sqlite> INSERT INTO recipe VALUES ('pumpkin pie', 'pumpkin sugar flour butter');

进行全文查询

  SELECT * FROM recipe WHERE recipe MATCH 'onions cheese';
  SELECT * FROM recipe WHERE recipe MATCH 'onions OR cheese';
  SELECT * FROM recipe WHERE recipe MATCH 'name:stew ingredients:onions';
  SELECT * FROM recipe WHERE recipe MATCH '"green onions"';
  SELECT * FROM recipe WHERE ingredients MATCH 'onions -cheese';
  SELECT * FROM recipe WHERE recipe MATCH 'onions -cheese';
  SELECT * FROM recipe WHERE recipe MATCH 'bu*';  SELECT docid FROM recipe AS ra WHERE ra MATCH 'stew';  SELECT docid FROM recipe AS ra WHERE recipe MATCH 'stew';  SELECT docid FROM recipe WHERE recipe MATCH 'onions' AND recipe MATCH 'cheese';
  SELECT docid FROM recipe WHERE recipe MATCH 'onions cheese';自己试试查询效果。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wannet/archive/2009/09/16/4557311.aspx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值