【问题标题】:to_tsquery query for phone numbersto_tsquery 查询电话号码
【发布时间】:2021-03-23 16:14:16
【问题描述】:

我们有一个 postgres 数据库,并使用 tsvector 对搜索可能需要的所有文本搜索属性进行大量索引,并且 ts_query 在我们的 postgres 数据库中的使用性能很高。但一种可能的搜索条件是电话号码,我们必须支持用户可能搜索的所有可能格式。

假设我在 tsvector 上的电话号码存储为“12985345885”,用户搜索 2985345885,我该如何在 ts_query 中处理?

基本上:

select
('12985345885')::tsvector @@ ('12985345885:*')::tsquery

是真的

select
('12985345885')::tsvector @@ ('2985345885:*')::tsquery

是假的。 postgres tsquery 好像不支持通配符前缀?

【问题讨论】:

    标签: postgresql full-text-search


    【解决方案1】:

    全文搜索不适合这种情况,因为它是为搜索单词而设计的。

    我会进行子字符串搜索和三元索引:

    CREATE EXTENSION IF NOT EXISTS pg_trgm;
    
    CREATE INDEX ON mytab USING gin (phone gin_trgm_ops);
    
    SELECT * FROM mytab WHERE phone LIKE '%2985345885%';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多