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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章