postgresql - 在 PostgreSQL 全文搜索中使用“websearch_to_tsquery”进行前缀/通配符搜索?
问题描述
我目前正在使用 websearch_to_tsquery 函数在 PostgreSQL 中进行全文搜索。除了我似乎不再能够进行部分匹配之外,这一切都很好。
SELECT ts_headline('english', q.\"Content\", websearch_to_tsquery('english', {request.Text}), 'MaxFragments=3,MaxWords=25,MinWords=2') Highlight, *
FROM (
SELECT ts_rank_cd(f.\"SearchVector\", websearch_to_tsquery('english', {request.Text})) AS Rank, *
FROM public.\"FileExtracts\" f, websearch_to_tsquery('english', {request.Text}) as tsq
WHERE f.\"SearchVector\" @@ tsq
ORDER BY rank DESC
) q
搜索客户工作但cust * 和cust: * 不搜索。
我浏览了文档和一些文章,但我找不到很多关于它的信息。我以前没有使用过它,所以希望这只是我做错了什么简单的事情?
解决方案
你不能这样做,websearch_to_tsquery
但你可以这样做to_tsquery
(因为 ts_query 允许添加:*
通配符)并自己在后端添加 websearch 语法。
例如,在 node.js 环境中,您可以这样做。像这样:
let trimmedSearch = req.query.search.trim()
let searchArray = trimmedSearch.split(/\s+/) //split on every whitespace and remove whitespace
let searchWithStar = searchArray.join(' & ' ) + ':*' //join word back together adds AND sign in between an star on last word
let escapedSearch = yourEscapeFunction(searchWithStar)
而不是在你的 SQL 中使用它
search_column @@ to_tsquery('english', ${escapedSearch})
推荐阅读
- javascript - 菜单按钮有问题,切换功能不起作用
- react-native - 有没有办法在 React Native 应用程序中以表单形式发送电子邮件?
- javascript - 使用条件或循环定位
- javascript - 反应:渲染没有返回任何内容
- widgetkit - 是什么阻止了我的 Objective-C 类在小部件扩展中使用?
- c# - 如何在不使用 if 或 switch case 的情况下动态使用 XmlSerializer / Deserialize?
- loops - 如何确定要使用的最佳循环类型
- wordpress - 这个脚本在 WP 中是什么意思?
- voip - Ozeki VoIP 2 台相同的计算机,一台工作双向音频,另一台不工作
- reactjs - React js 中 PropTypes 的使用