我想对2列执行全文搜索,包括部分查询。我尝试了多种选择,这一种对我来说似乎是最好的:1.在<->查询词和结尾处的:* 之间添加1.执行查询问题是,我必须在TypeORM中执行查询,所以当我使用to_tsquery(:query)时,查询中可能有无效的语法,这会产生错误。函数plainto_tsquery()将是完美的,因为它防止了参数中的无效语法,但同时也防止了部分查询,我可以按照描述来执行部分查询。你知道我怎样才能把世界上最好的东西结合起来吗?
to_tsquery(:query)
plainto_tsquery()
mum43rcc1#
你可以试试
SELECT to_tsquery(quote_literal(query) || ':*')
这将<->在word和每个单词末尾的:* 之间添加,而quote_literal应该通过转义文本来避免语法问题。然而这种方法的缺点是当遇到带有符号的查询时,生成的查询可能会出现意外的行为,例如,o'reilley as query将生成'o':<->' reilley ': as tsquery,这可能不会给予预期的结果。不幸的是,我知道的唯一解决方案是清除输入和文本数据中的任何符号。
1条答案
按热度按时间mum43rcc1#
你可以试试
这将<->在word和每个单词末尾的:* 之间添加,而quote_literal应该通过转义文本来避免语法问题。
然而这种方法的缺点是当遇到带有符号的查询时,生成的查询可能会出现意外的行为,例如,o'reilley as query将生成'o':<->' reilley ': as tsquery,这可能不会给予预期的结果。不幸的是,我知道的唯一解决方案是清除输入和文本数据中的任何符号。