加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 匹配以前缀结尾的短语和全文搜索

发布时间:2020-12-13 16:15:04 所属栏目:百科 来源:网络整理
导读:我正在寻找一种方法来使用PostgreSQL中的tsvector模拟SELECT * FROM table WHERE attr LIKE’%text%’之类的东西. 我没有使用字典就创建了一个tsvector属性.现在,像…这样的查询 SELECT titleFROM tableWHERE title_tsv @@ plainto_tsquery('ph:*'); …将
我正在寻找一种方法来使用PostgreSQL中的tsvector模拟SELECT * FROM table WHERE attr LIKE’%text%’之类的东西.

我没有使用字典就创建了一个tsvector属性.现在,像…这样的查询

SELECT title
FROM table
WHERE title_tsv @@ plainto_tsquery('ph:*');

…将返回所有标题,如’Physics’,’PHP’等.但是,如何创建一个返回所有标题的查询,其中标题以’Zend Fram’开头(应该返回例如’Zend Framework’)?

当然,我可以使用类似的东西:

SELECT title
FROM table
WHERE title_tsv @@ to_tsquery('zend')
AND   title_tsv @@ to_tsquery('fram:*');

然而,这似乎有点尴尬.

所以,问题是:有没有办法用以下方法制定上面给出的查询:

SELECT title
FROM table
WHERE title_tsv @@ to_tsquery('zend fram:*');
SELECT title
FROM table
WHERE title_tsv @@ to_tsquery('zend') and
title_tsv @@ to_tsquery('fram:*')

相当于:

SELECT title
FROM table
WHERE title_tsv @@ to_tsquery('zend & fram:*')

但当然发现“Zend也没有框架”.

当然,你可以在tsquery匹配后表达与标题的正则表达式匹配,但你必须使用explain analyze来确保在tsquery之后而不是之前执行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读