优化 PGSQL SQL 大文本搜索查询('like',全文搜索,...)

optimizing PGSQL SQL search queries on big texts ('like', full text search, ... )

我们有超过 200 位客户使用的软件解决方案。我们最近切换到 pgsql,因为我们以前的数据库在处理客户使用的搜索查询时速度太慢。

我们的数据库如下所示:

TABLE一个

 1. ID
(+ some other fields which aren't important here)

TABLE B

这个table是用来在tableA的物品上储存'data'的。这对每个客户来说都是不同的。例如 'Type' 可以是 'CLIENTNAME' 和值 'AZERTY'。 TABLE A 上的一条记录可以在 TABLE B 中有无限条记录。通常 Table A 中的 1 条记录在 Table B 上有 5 - 10 条记录。

1. ID TABLE A
 2. TYPE
 3. VALUE

TABLE C

 1. TABLE A ID
 2. VERSIONNR
 3. DESCRIPTION

这个文件有不同版本的TABLEA​​记录。每个版本都有一个扩展描述。这可以从 0 个字符到无限。

我们的问题:我们的客户习惯于 'google-like' 搜索。例如:他们键入 'AZERTY',我们显示来自 TABLE A 的所有记录,其中 TABLE A 的 ID:

其他问题:此搜索是 'contains'。如果他们搜索 'ZER',他们也应该找到其中包含 'AZERTY' 的记录。多个参数是一个 'AND',如果它们搜索 'ZER 123',我们需要显示描述匹配 'ZER' 和 '123' 或值匹配 'ZER' 和 ' 123'.

到目前为止我们做了什么:

TABLED

示例记录:

- 1
- ZER 123 CLIENT NAME NUMBER 7856 jsdfjklf 4556423
- DESCRIPTION CAN BE VERY LONG.

如果客户搜索 'ZER 123',这将变为: "select TABLE_A_ID from TABLE_D where values like '%ZER%' and values like '%123%'"

重要: 我们的一些客户在 TABLE A.+5.000.000 中有很多记录,这意味着在 TABLE B (+/- 50.000.000) 中有很多记录。我们的大多数客户在 TABLE A 中拥有 300.000 到 500.000 条记录。

我的问题:

我希望我已经解释清楚了。 提前致谢!

您的术语令人困惑,但我假设您在写 "files" 时指的是 "tables"。

您无法通过单个查询在多个 table 中进行合理搜索,但您可以同时在单个 table 的多个列中进行搜索。

根据您的描述,我会说您需要 trigram index 连接 table 中的相关字符串列。