- 浏览: 1473763 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
getelephantbyid:
make 无法通过.....
php-5.3,php-5.4的thttpd2.25b补丁,及编译方法 -
getelephantbyid:
patch -p1 ../php-5.4.7_thttpd-2 ...
php-5.3,php-5.4的thttpd2.25b补丁,及编译方法 -
zander:
zander 写道c 语言是静态类型语言还是动态类型语言阅读理 ...
什么是动态语言和静态语言? -
zander:
c 语言是静态类型语言还是动态类型语言
什么是动态语言和静态语言? -
lunajiayou:
很有道理,赞一个
跟着苍蝇会找到厕所,跟着蜜蜂会找到花朵
所有用到到包有:
cmake-2.6.4.tar.gz (编nlpbamboo用)
CRF++-0.53.tar.gz(同上)
nlpbamboo-1.1.1.tar.bz2(分词用)
postgreSQL-8.3.3.tar.gz(索引用)
安装pgsql
tar -zxvf postgreSQL-8.3.3.tar.gz
cd postgre-8.3.3
./configure –prefix=/opt/pgsql
make
make install
useradd postgre
chown -R postgre.postgre /opt/pgsql
su – postgre
vi ~postgre/.bash_profile
添加
export PATH
PGLIB=/opt/pgsql/lib
PGDATA=/data/PGSearch
PATH=$PATH:/opt/pgsql/bin
MANPATH=$MANPATH:/opt/pgsql/man
export PGLIB PGDATA PATH MANPATH
# mkdir -p /data/PGSearch
# chown -R postgre.postgre /data/PGSearch
# chown -R postgre.postgre /opt/pgsql
#sudo -u postgre /opt/pgsql/bin/initdb –locale=zh_CN.UTF-8 –encoding=utf8 -D /data/PGSearch
#sudo -u postgre /opt/pgsql/bin/postmaster -i -D /data/PGSearch & //允许网络访问
#sudo -u postgre /opt/pgsql/bin/createdb kxgroup
# vim /data/PGSearch/pg_hba.conf 如下增加可访问的机器:
host all all 10.2.19.178 255.255.255.0 trust
#su – postgre
$pg_ctl stop
$postmaster -i -D /data/PGSearch &
安装中文分词(Cmake CRF++ bamboo)
Cmake是为了编译bamboo,CRF++是bamboo依赖的。
tar -zxvf cmake-2.6.4.tar.gz
cd cmake-2.6.4
./configure
gmake
make install
tar -zxvf CRF++-0.53.tar.gz
cd CRF++-0.53
./configure
make
make install
tar -jxvf nlpbamboo-1.1.1.tar.bz2
cd nlpbamboo-1.1.1
mkdir build
cd build/
cmake .. -DCMAKE_BUILD_TYPE=release
make all
make install
cp index.tar.bz2 /opt/bamboo/
cd /opt/bamboo/
tar -jxvf index.tar.bz2
#/opt/bamboo/bin/bamboo
如果出现:
ERROR: libcrfpp.so.0: cannot open shared object file: No such file or directory
就执行:
ln -s /usr/local/lib/libcrfpp.so.* /usr/lib/
ldconfig
增加上中文分词扩展到pgsql
#vim /root/.bash_profile 也增加:
PGLIB=/opt/pgsql/lib
PGDATA=/data/PGSearch
PATH=$PATH:/opt/pgsql/bin
MANPATH=$MANPATH:/opt/pgsql/man
export PGLIB PGDATA PATH MANPATH
#source ~/.bash_profile
cd /opt/bamboo/exts/postgres/chinese_parser/
make
make install
su – postgre
cd /opt/pgsql/share/contrib/
touch /opt/pgsql/share/tsearch_data/chinese_utf8.stop
psql kxgroup
\i chinese_parser.sql 导入
再执行下面的sql,已经可以将一段话分词了:
SELECT to_tsvector(’chinesecfg’, ‘结果在命令行下执行bamboo才知道’);
先到这里,下一部分讲述对TEXT字段进行索引和查询,完整构造一整个搜索引擎。
一、基础篇
本回从一条sql开始:
select * from dbname where field_name @@ ‘aa|bb’ order by rank(field_name, ‘aa|bb’);
从这个sql字面意思讲解:从 dbname这个表中查field_name匹配aa或者是bb的词,并且按照他们的匹配的RANK排序。
基本上明白上面这段话后,来学习四个概念:tsvector、 tsquery、 @@ 、gin。
1.tsvector:
在postgreSQL 8.3自带支持全文检索功能,在之前的版本中需要安装配置tsearch2才能使用。它提供两个数据类型(tsvector,tsquery),并且通过 动态检索自然语言文档的集合,定位到最匹配的查询结果,tsvector正是其中之一。
一个tsvector的值是唯一分词的分类列表,把一话一句词格式化为不同的词条,在进行分词处理的时候,tsvector会自动去掉分词中重复的词条,按照一定的顺序装入。例如
SELECT ‘a fat cat sat on a mat and ate a fat rat’::tsvector;
tsvector
—————————————————-
‘a’ ‘on’ ‘and’ ‘ate’ ‘cat’ ‘fat’ ‘mat’ ‘rat’ ’sat’
通过tsvector把一个字符串按照空格进行分词,这可以把分词后的词按照出现的次数排成一排(还会按词长度)。
对于英文和中文的全文检索我们还要看下面这条sql:
SELECT to_tsvector(’english’, ‘The Fat Rats’);
to_tsvector
—————–
‘fat’:2 ‘rat’:3
to_tsvector函数来是tsvector规格化的,在其中可指定所使用的分词。
2.tsquery:
顾名思义,tsquery,表示的应该是查询相关的.tsquery是存储用于检索的词条.并且可以联合使用boolean 操作符来连接, & (AND), | (OR), and ! (NOT). 使用括号(),可以强制分为一组.
同时,tsquery 在做搜索的时候,也可以使用权重,并且每个词都可以使用一个或者多个权重标记,这样在检索的时候,会匹配相同权重的信息.跟上面的tsvector相同,tsquery也有一个to_tsquery函数.
3.@@:
在postgresql中全文检索匹配操作使用@@ 操作符,如果一个
tsvector(document) 匹配到 tsquery(query)则返回true.
看一个简单的例子:
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));
二、提高篇
基础知识学完了,应该上阵了,为了实现全文检索,我们需要把一个文档创建一个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’
三、终结篇
看完上面的一堆后,千言万语汇成一句话,本文主要讲的是一条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就不写了。授人以渔才是关键。
发表评论
-
mysql报Could not open file '/var/log/mysql/error.log' for error logging: Permissi
2018-12-04 12:35 10408报错的原因是我用转链接把/var/log/目录链接到了其它地方 ... -
postgresql advisory lock实现秒杀
2018-10-21 20:28 1091https://yq.aliyun.com/articles/ ... -
postgresql触发器old的使用
2018-08-30 20:07 2505在insert语句中old的值是null,如果访问null ... -
redis安装
2018-04-30 18:19 406下载最新的msi安装文件 https://github. ... -
monodb安装
2018-04-30 17:57 1280下载https://www.mongodb.com/down ... -
yii2 advanced安装
2017-12-23 01:37 676安装composer https://getcompos ... -
索引与优化like查询
2012-09-17 19:57 10891. like %keyword 索引失效,使用全表扫描 ... -
PostgreSQL中hash索引可能损坏
2010-12-30 22:05 1328http://postgresql.1045698.n5.na ... -
深入理解数据库日志系统原理
2010-12-30 21:29 1583深入理解数据库日志系统原理 一:事务系统 ... -
PostgreSQL配置优化
2010-12-30 14:45 3463PG的配置文件是数据库 目录下的postgresq ... -
存储程序的稳定性以及对索引的影响
2010-12-17 12:51 1010每个函数都有一个易失 ... -
php读取数据库二进制字段
2010-12-03 22:57 1613create table btest(id serial pr ... -
PgSQL数据库分区
2010-11-18 19:49 4654PgSQL数据库分区 :分区的意思就是把逻辑上的一个大表分割 ... -
PostgreSQL可以弥补MySQL数据库的哪些缺点
2010-11-14 15:19 3152转:http://blog.chinaunix.net/u2/ ... -
PostgreSQL帖子汇总
2010-11-12 22:34 1140http://bbs.chinaunix.net/viewth ... -
PostgreSQL与MySQL比较
2010-11-12 22:25 1992转:http://bbs.chinaunix.net/thre ... -
PostgreSQL 8.3.1 全文检索(Full Text Search)
2010-11-12 18:58 1842转自:http://www.blogjava.net/agun ... -
PostgreSql的Bamboo全文索引扩展
2010-11-12 18:49 1180http://code.google.com/p/nlpbam ... -
PostgreSql查看索引
2010-11-11 17:59 9226select * from pg_indexes where ... -
PostgreSql日志记录执行计划
2010-11-11 00:35 1720postgresql.conf配置中加入如下行 sha ...
相关推荐
### zabbix详细安装教程(linux+postgresql+nginx+zabbix) #### 环境说明与配置 本教程将指导您如何在Linux环境下安装Zabbix监控系统,并结合PostgreSQL作为数据库服务以及Nginx作为Web服务器。具体环境配置为:...
在本项目中,我们主要探讨的是如何将SpringMVC、MyBatis、PostgreSQL数据库以及Maven构建工具进行有效的整合,以实现一个高效且模块化的Web应用开发环境。以下是关于这些技术及其整合的关键知识点的详细说明: **1....
PostgreSql+PostGis 创建空间数据库 PostgreSql 是一个功能强大且开源的关系数据库管理系统,它提供了一个强大的平台来存储和管理数据。PostGis 是一个基于PostgreSql 的空间数据库扩展,它提供了对空间数据的支持...
在GIS应用中,PostgreSQL通常与PostGIS扩展一起使用,提供空间数据支持;Tomcat作为应用服务器,部署GIS相关的Web应用程序;而JDK则是Java编程的基础,用于编写和运行GIS应用的后端代码。这些组件的协同工作使得GIS...
**正文** # PostgreSQL+pgpool+pg_rman 高可用实施手册 ## 第一章 方案介绍 ### 1....本手册旨在为实施团队提供全面、详尽的指导,确保PostgreSQL+pgpool+pg_rman高可用架构的成功搭建和稳定运行。
POSTGRESQL+POSTGIS+GDAL编译指南 POSTGRESQL是一种基于关系数据库管理系统(RDBMS),它支持大量的数据类型、索引、视图、触发器、存储过程等功能,同时也支持地理信息系统(GIS)的应用。POSTGIS是POSTGRESQL的...
下载如有问题,可私信博主。下载前建议先查看博客内容,其地址为:https://blog.csdn.net/QQ98281642/article/details/120483897
PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),它以其强大的功能和高度的可扩展性而备受赞誉。PostgreSQL支持多种数据类型,包括文本、数字、时间和空间数据,这使得它在处理复杂的数据结构时表现出色...
这个系统可能是为了提供一个轻量级、高效的管理平台,方便开发者快速搭建自己的业务逻辑。接下来,我们将深入探讨其中涉及的技术栈和关键知识点。 【Koa框架】 Koa是Node.js的一个轻量级Web应用框架,由Express团队...
maven+mybatis+springmvc+PostgreSQL+log4j搭建的基础框架,里面做了注释和说明,比较详细,参考资料http://www.open-open.com/lib/view/open1392252233301.html
PostgreSQL+Dart API+Python程序+ASP.NET核心MVC+Docker.zip
对于Linux用户,可以使用相应的包管理器来安装PostgreSQL,例如使用apt-get命令在Ubuntu系统中安装PostgreSQL: ``` sudo apt-get install postgresql ``` 二、PostGIS的安装 PostGIS是PostgreSQL的一个扩展,...
PostgreSQL + pg_jieba 的 Docker 镜像
Centos7.6源码编译安装HTTP+PHP+Zabbix 5.2.2+PostgreSQL+TimescaleDB+Grafana
直接从网上荡下DWZ的dwz4j企业级Java Web快速开发框架(Mybatis + SpringMVC) + jUI整合应用使用的话,里面的一些内容比较冗余,另外里面缺少权限和security,以及对postgre的数据库使用demo,而最近项目中需要开发...
python毕业设计-基于Django+PostgreSQL+markdown的小型博客站源码设计与实现+使用说明.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关...
如何运行: $ docker run -d --name postgres -e POSTGRES_PASSWORD=postgres binakot/postgresql-postgis-timescaledb 您也可以使用构建的docker映像和pgAdmin4运行应用程序堆栈:docker docke