在postgresql日志中避免“文本搜索查询仅包含停用词或不包含词句,忽略”

时间:2012-02-07 05:01:21

标签: postgresql

我正在使用texticle(https://github.com/tenderlove/texticle)库来进行全文postgresql搜索。

该库生成如下的sql:

to_tsvector('spanish', "games"."system"::text) @@ plainto_tsquery('spanish', 'Genesis'::text)

如果有人搜索“&”,那么我会在日志中收到警告:

text-search query contains only stop words or doesn't contain lexemes, ignored

我该如何避免这种情况?如果搜索词只包含停用词,我是否应该知道应用程序的各种停用词并且不发送postgresql查询?或者,我可以告诉postgresql以某种方式忽略此警告吗?

3 个答案:

答案 0 :(得分:1)

此函数可用于解析查询是否仅包含停用词:

numnode(plainto_tsquery('spanish','&'))= 0)

答案 1 :(得分:0)

我个人总是清理用户输入。在大多数情况下,它应该被认为是邪恶的。所以在这种情况下我肯定会在应用程序级别进行一些过滤。

答案 2 :(得分:0)

警告完全具有描述性。基本上你必须在编程逻辑中处理这个问题。如果您的搜索是在存储过程中,您可以测试该值并查看它是否包含lexemes。

否则,您可以将日志记录级别设置为ERROR,以便不设置警告,或者您可以在应用程序级别处理警告。

这些都不是完美的。如果我搜索“the”,我应该得到一个类似的警告,所以你可能希望能够在它被转换为tsquery后检查(即在数据库本身。

否则,我的建议是忽略警告。