首页 > 解决方案 > 在 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: * 不搜索。

我浏览了文档和一些文章,但我找不到很多关于它的信息。我以前没有使用过它,所以希望这只是我做错了什么简单的事情?

标签: postgresqlfull-text-search

解决方案


你不能这样做,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})

推荐阅读