关于中文分词如何集成使用,网上是有写例子的,之前我也写总结了下。
不过数据源可以是varchar类型的,也可以text类型。
然后通过安装后的两个分词函数tokenize和to_tsvector。使用的场景不一样。
这里我首先假设了一个数据源(该表是将数据源和索引字段放在一起)
其中content为源内容,idx_fti为content的索引内容。
然后可以在idx_fti上面建立索引,sql语句如下:
create index 索引名 on 表名 using gist('列名')
idx_fti里存放的内容,是sql语句如下:
update 表名 set idx_fti=to_tsvector(‘chinesecfg',coalesce(content,''));
首先说下tokenize函数
运行如下sql命令:
select tokenize('男士T恤');
返回结果如下:
这里是将语句做了分词处理,为什么要做语句分词处理呢?那是因为
select content from 表名 where idx_fti @@ '男士T恤';
或者是语句:
select content from 表名 where idx_fti @@ to_tsquery('男士T恤');
是无法获取到结果的。
返回的结果是NULL,查不出来任何的信息。
所以必须通过了分词处理后,将以空格作为分割,转换格式(这一步骤是通过程序来实现的),得到“男士|T|恤”,这样的形式。
然后再去查询,语句变成:
select content from 表名 where idx_fti @@ '男士|T|恤';
就可以得到结果了,如图:
在我另一篇安装的文章里,创建了一个chinese_utf8.stop文件。
这个文件就是用来输入需要屏蔽词,提高全文检索的效率,命令如下:
echo "的" | iconv -f gbk -t utf8 > chinese.stop.utf8 (如果你的终端是UTF8的,则可以忽略 iconv 语句。)
需要输入更多的屏蔽词的话,用命令:
echo "屏蔽词" | iconv -f gbk -t utf8 >> chinese.stop.utf8
这里还要注意一个问题,就是
to_tsvector(‘chinesecfg',''))和to_tsvector(coalesce(content,'')),生成的索引记录是不一样的,后者生成值如下: