我正在使用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以某种方式忽略此警告吗?
答案 0 :(得分:1)
此函数可用于解析查询是否仅包含停用词:
numnode(plainto_tsquery('spanish','&'))= 0)
答案 1 :(得分:0)
我个人总是清理用户输入。在大多数情况下,它应该被认为是邪恶的。所以在这种情况下我肯定会在应用程序级别进行一些过滤。
答案 2 :(得分:0)
警告完全具有描述性。基本上你必须在编程逻辑中处理这个问题。如果您的搜索是在存储过程中,您可以测试该值并查看它是否包含lexemes。
否则,您可以将日志记录级别设置为ERROR,以便不设置警告,或者您可以在应用程序级别处理警告。
这些都不是完美的。如果我搜索“the”,我应该得到一个类似的警告,所以你可能希望能够在它被转换为tsquery后检查(即在数据库本身。
否则,我的建议是忽略警告。