aardio 文档

aardio 范例: sqlite 库 - 全文搜索

//sqlite 库 - 全文搜索
import sqlite;
import console.int;

var db = sqlite("/test-fts.db");  
if(!db.existsTable("ftstest")){
    //tokenize 指定分词器,fts5 改用 unicode61(需要改用 sqlite.latest 库)
    db.exec("CREATE VIRTUAL TABLE ftstest USING fts4 (data,body,tokenize=simple)"); 
}

import mmseg
var str = /*
一些普通名词作为专有名词使用时,通常需要大写首字母以示区分。
例如 Python, python 分别表示不同的意思。

但有些名词本就是专有名词,并不需要大写首字母。
例如 eBay,iPhone,adidas ,aria2 …… 以及 aardio 。

logo 里使用小写首字母品牌或产品名称就更多了。
小写首字母体现友好、接地气、非传统、简洁、务实与创新的精神。 

aardio 在编码中也保持小写首字母的驼峰式命名风格。
仅仅在调用其他语言编写的接口或组件时,会保持原来的大写首字母以示区分。
*/

var data = "";
for word,attr in mmseg.each(str){ 
    //SQLite 自带的 simple 分词器用空格分词
    if(attr) data = data + " " + word;
}

//创建预处理命令,用 @ 字符作为 SQL 命名参数的前缀
var cmd = db.prepare("INSERT INTO [ftstest] VALUES ( @data,@body );");

//执行命令语句,插入测试数据,并指定 SQL 命名参数
cmd.step(
    data = data;
    body = str; 
);  

cmd.finalize();

//MATCH 用于全文检索,simple 或 unicode61 分词器在查询时忽略大小写。
var result = db.stepQuery("SELECT body FROM [ftstest] WHERE data MATCH '专有名词'");

//在词前面加^ 表示该词必须是某列的第一个词
var result = db.stepQuery("SELECT body FROM [ftstest] WHERE data MATCH '^一些'");

//在词后面加* 表示匹配所有以该词为前缀的词
var result = db.stepQuery("SELECT body FROM [ftstest] WHERE data MATCH '专有*'");

//可以空格分隔多个必须包含的查询词,相当于使用隐式 AND 操作符
var result = db.stepQuery(`SELECT body  FROM [ftstest] WHERE data MATCH '小写 首字母'`);

//包含多个词的短语首尾要加双引号
var result = db.stepQuery(`SELECT body  FROM [ftstest] WHERE data MATCH '"小写 首字母"'`);

//支持逻辑操作符 OR 分隔查询词(找到其中一个即可)。
var result = db.stepQuery(`SELECT body  FROM [ftstest] WHERE data MATCH '小写 OR 首字母'`);
//改用库 sqlite.latest,并改用 FTS5 可支持逻辑操作符 NOT AND 。

//查看结果
console.dump(result[["body"]]);

//删除表 
db.exec("DROP TABLE ftstest");
Markdown 格式