我有一个数据库,存储来自各种SCR的Code Chekins的详细信息。此数据库中的一个表存储每个签入的Commit Comments。我正在尝试开发一个搜索功能,在Postgres posix表示法的帮助下搜索此表,尝试匹配此注释字段上的正则表达式并返回所有匹配的。
我已经有了这个工作,但这里的主要问题是这个搜索的性能。对于一个相当大的数据库,它几乎需要15-20分钟才能完成搜索,并且由于它的Web前端等待结果,这对于中型数据库来说是完全不可接受的时间。 我认为在这个文本字段上创建一个索引可能会有所帮助,但我无法创建一个btree索引,因为某些行的数据对于potgres来说太大了,无法在其上创建索引。
还有其他解决办法吗?是否还有其他可以创建的索引不应该依赖于语言?
答案 0 :(得分:2)
检查full text search functions,正则表达式不能使用索引。
答案 1 :(得分:1)
现在,您可以使用pg_trgm扩展名。
文档:
http://www.postgresql.org/docs/9.1/static/pgtrgm.html
良好的起点:
http://www.depesz.com/2011/02/19/waiting-for-9-1-faster-likeilike/
答案 2 :(得分:0)
是的,全文搜索是你的答案。 PostgreSQL具有非常强大和快速的FTS功能。
答案 3 :(得分:0)
其他人提到全文搜索。如果需要正则表达式而不是全文搜索,则无法以通用方式对其进行索引。只要表达式锚定在字符串的开头(在开头使用^),通常可以使用索引,但对于通用正则表达式,无法使用索引进行搜索。