我搜索过postgreSQL 文档(v9.6)关于 to_tsquery() 的使用,以及许多其他来源(通过 Google 搜索引擎)。我发现提示其他人也遇到过类似的问题,但我可能需要帮助,也许只是了解 to_tsquery postgreSQL 语法的基本性质。
如果我查询
SELECT * from table
WHERE table.email @@ to_tsquery('[email protected]');
email
然后我得到该列包含'的所有行[电子邮件保护]“”。
但如果我查询
SELECT * from table
WHERE table.email @@ to_tsquery('user:* & domain:* & ext:*');
那么我就没有行。
有人能就我在第二种情况下可能滥用的情况提供任何指导吗to_tsquery
?我的意图是从电子邮件地址中删除@
和,并在、和与电子邮件匹配的.
情况下进行匹配。usr
domain
ext
谢谢您的指导!
--J
答案1
正如 PostgreSQL 提交者在讨论您链接到:
tsvector 用于搜索自然语言单词。想象它的工作方式与子字符串匹配完全一样并不是一个好主意,尤其是对于非简单单词的字符串。
文本搜索解析器[email protected]
在较大的文本中将其识别为类型的标记email
。它不提供任何提取顶级域或子域或本地地址部分的功能。
此外,不清楚您的用例是什么。将语言环境部分与前缀进行匹配可能有意义,但将顶级域与前缀进行匹配?作为 TLD与或 的.co
关系并不大,因此不会像匹配模式那样取得多大成就。.com
.org
.info
ext:*
此外,子域名本质上是分层的。ibm
可以在中找到something.ibm.com
,但它不匹配ibm:*
,因此这种匹配似乎也没有什么用。