PostgreSQL关于中文搜索的简单尝试

2020-06-17 00:00:00 函数 中文 分词 互联 我爱

[2016-08-23] 更新

这篇文章写的很粗糙,对于这方面当时主要更多是从尝试的角度来说的。我是一个很懒的人,本质是想,以分词这种事情来讲,数据库能解决就不用其他外部工具甚至代码解决,所以才研究点点东西写了这篇。但是实际上后来我做的一些工作中遇到了很多问题,我提一下:

1、postgresql的程序执行效率很低,导致文章后的分词函数占用大量CPU。

2、postgresql插入速度很慢,占用了大量IO吞吐量,表现的是top命令的wa非常高。

3、postgresql 9.6之前不支持将函数声明为线程安全,所以下面的函数执行非常慢。

4、下面的简单方法在十万级数据,有一定意义,再多了肯定不行,必须要其他方法。

5、下面的中文分词函数还有很严重问题,只是简单抛砖引玉,简单的是,至少要区分中文和英文(CJK or western),然后能保证分别分词,我后来也根据这个原则写了函数,没发出来。因为我后来觉得这个工作实际意义对我来说已经没有了,因为我后续想解决的问题是百万到千万级的数据存储,这个时候postgresql的缺点就非常明显了(现在我的电脑里elasticsearch占用了7GB内存还在持续增长……)

----------

PostgreSQL自然没有Elasticsearch/Lucene那么强大的全文检索能力,不过相对的,Elasticsearch也没有PostgreSQL所拥有的各种方便的关系处理能力。

本文主要是对于笔者进行PostgreSQL进行中文全文搜索的简单尝试,欢迎指教。

需要用到的函数:

to_tsvector

to_tsvector(text text)

相关文章