gpt4 book ai didi

validation - to_tsquery() 验证

转载 作者:行者123 更新时间:2023-11-29 11:37:12 26 4
gpt4 key购买 nike

我目前正在开发一个允许在 PostgreSQL 上进行搜索的网站数据库,搜索与 to_tsquery() 一起工作,我正试图找到一种方法来验证输入,然后再将其作为查询发送。

除此之外,我还尝试添加一个短语功能,这样如果有人搜索 HELLO | "I LIKE CATS" 它只会找到包含 "hello" 或整个短语 "i like cats" 的结果(与 I & LIKE & CATS 会找到包含所有 3 个词的文章,不管它们出现在哪里)。

最佳答案

有没有什么原因让数据库服务器验证它太昂贵了?在客户端复制ts_query解析算法确实有点过分。

如果您担心的是您不希望它在每次验证时都尝试运行整个查询(大概会涉及表访问),您可以在较小的查询中使用输入,只需使用伪代码(可能看起来有点像 Python,但这只是巧合):

is_valid_query(input):
try:
execute("SELECT ts_query($1)", input);
return True
except DatabaseError:
return False

关于短语,最简单的方法可能是首先通过非短语查询(使用索引)进行搜索,然后过滤那些包含短语的查询。这可以在服务器端或客户端完成。根据被解析的语言,构建一个简单的短语正则表达式来处理重复的空格或其他可忽略的符号可能是最简单的。

  1. 搜索 to_tsquery('HELLO|(I&LIKE&CATS)'),获取松散匹配的文档列表。
  2. 在客户端中,将其过滤为匹配正则表达式“HELLO|(I\s+LIKE\s+CATS)”的那些。

缺点是您确实需要一些额外的代码来将您的查询转换为适当的松散查询,然后将其转换为正则表达式。

最后,PostgreSQL 中可能有一种技术可以使用存储在 ts_vectors 中的词位位置进行正确的短语搜索。我猜短语搜索是预期用途之一,但我在粗略搜索中找不到它的示例。在 http://linuxgazette.net/164/sephton.html 底部附近有一个部分至少。

关于validation - to_tsquery() 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6735881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com