18. Postgres Story --全文搜索引擎
TSearch2
vector
to_tsvector
query
to_tsquery
@@
vector @@ query
setweight(tsvector, char)
rank
get and set
rank_cd
cover density ranking
23. Postgres Story --语义模型
问题分析
动态数据类型问题
多表串联
动态类型的应用层支持
DSL支持
思路
SQLAlchemy
subject = (subject predicate object) : subjects
semantic query language
Dynamic Type Object Model
24. Postgres Story --语义模型
架构
subject is subject
predicate is subject
predicate has objType
predicate has name (name just it's word)
is is predicate
is objType subject
objType is subject
objType name objType
has is predicate
has objType predicate
name is predicate
25. Postgres Story --语义模型
架构
name objType text
text is type
set is predicate
set objType subject
list is predicate
list objType subject
……
26. Postgres Story --语义模型
数据库层
create table subject
id serial
subject integer foreign key references subject
(id)
predicate integer foreign key references subject
(id)
object integer foreign key references subject(id)
create table text
id serial
subject integer foreign key references subject
(id)
27. Postgres Story --语义模型
查询:
subs : select * from subject where ...
select * from text where subject in subs.subject
select * from "other regist type" where ...
分析
与数据相比,基础类型总是有限的
整数据列索引后性能很好
需要动态类型的应用层查询工具支持
28. Postgres Story --语义模型
QL设计:
subject predicate object
object = subject predicate
object predicate subject
object `predicate ` subject
get subject filter predicate match some condition
get subject (p0, p1, ...) filter ...
put/insert/update (subject predicate object)
update subject (predicate object)s filter ...
"no DML!"
29. Postgres Story --语义模型
查询语言的设计分析:
需要感知注册的存储类型表
自省类型能力
一些基础谓词需要应用层解释
objType/type
is
...
应该定义一些内置容器类型
set
list
dict
...
应该支持惰性计算
30. Postgres Story --语义模型
查询语言的设计分析:
subject is a set of (predicate, object)
subject maybe anonymous
subject_id
predicate_id (predicate 一定有 name)
object
process(predicate -> object) could concurrent
object -> message -> argument
object -> method -> parameter
every thing is triple
(subject predicate object)