设为首页 加入收藏

TOP

使用postgreSQL+bamboo搭建比lucene方便N倍的全文搜索(二)
2014-11-24 07:25:21 来源: 作者: 【 】 浏览:1
Tags:使用 postgreSQL bamboo 搭建 lucene 方便 全文 搜索
.tsquery是存储用于检索的词条.并且可以联合使用boolean 操作符来连接, & (AND), | (OR), and ! (NOT). 使用括号(),可以强制分为一组.
同时,tsquery 在做搜索的时候,也可以使用权重,并且每个词都可以使用一个或者多个权重标记,这样在检索的时候,会匹配相同权重的信息.跟上面的tsvector相同,tsquery也有一个to_tsquery函数.
3.@@:
在postgresql中全文检索匹配操作使用@@ 操作符,如果一个
tsvector(document) 匹配到 tsquery(query)则返回true.
www.2cto.com
看一个简单的例子:
SELECT ‘a fat cat sat on a mat and ate a fat rat’::tsvector @@ ‘cat & rat’::tsquery;
column
———-
t
我们在处理索引的时候还是要使用他们的函数如下:
SELECT to_tsvector(’fat cats ate fat rats’) @@ to_tsquery(’fat & rat’);
column
———-
t
并且操作符 @@ 可以使用text作为tsvector和tsquery.如下操作符可以使使用的方法
tsvector @@ tsquery
tsquery @@ tsvector
text @@ tsquery
text @@ text
上面的前两种我们已经使用过了,但是后两种,
text @@ tsquery 等同于 to_tsvector(x) @@ y.
text @@ text 等同于 to_tsvector(x) @@ plainto_tsquery(y).(~)plainto_tsquery在后面讲。。。
4.gin:
gin是一种索引的名称,全文索引用的。
我们可以通过创建gin索引来加速检索速度.例如
CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector(’english’, body));
创建索引可以有多种方式.索引的创建甚至可以连接两个列:
CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector(’english’, title || body));
www.2cto.com
二、提高篇
基础知识学完了,应该上阵了,为了实现全文检索,我们需要把一个文档创建一个tsvector 格式,并且通过tsquery实现用户的查询,在查询中我们返回一个按照重要性排序的查询结果。
先看一个to_tsquery的sql:
SELECT to_tsquery(’english’, ‘Fat | Rats:AB’);
to_tsquery
——————
‘fat’ | ‘rat’:AB
可以看出,to_tsquery函数在处理查询文本的时候,查询文本的单个词之间要使用逻辑操作符(& (AND), | (OR) and ! (NOT))连接(或者使用括号)。
如果执行下面这条sql就会出错:
SELECT to_tsquery(’english’, ‘Fat Rats’);
plainto_tsquery函数却可以提供一个标准的tsquery,如上面的例子,plainto_tsquery会自动加上逻辑&操作符。
SELECT plainto_tsquery(’english’, ‘Fat Rats’);
plainto_tsquery
—————–
‘fat’ & ‘rat’
但是plainto_tsquery函数不能够识别逻辑操作符和权重标记。
SELECT plainto_tsquery(’english’, ‘The Fat & Rats:C’);
plainto_tsquery
———————
‘fat’ & ‘rat’ & ‘c’
www.2cto.com
三、终结篇
看完上面的一堆后,千言万语汇成一句话,本文主要讲的是一条sql,在加了第一部分里所讲述的扩展后,使用下面的sql,从一个字段中搜一句话,还要排序出来:
select * from tabname where to_tsvector(’chinesecfg’,textname) @@ plainto_tsquery(’搜点啥’) order by ts_rank(to_tsvector(’chinesecfg’,textname),plainto_tsquery(’搜点啥’)) limit 10;
之前的create table create index就不写了。授人以渔才是关键。
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇zookeeper集群搭建 下一篇10分钟搭建Hadoop集群

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)