【发布时间】:2019-09-22 03:42:20
【问题描述】:
我希望在 postgresql 上实现布尔文本搜索,以便用户能够构建自己的搜索。
我一直在关注全文搜索功能,它似乎很擅长查找单数单词,但我不能完全让它与完全匹配。
我想传递以下to_tsquery('europe | "hard brexit"'),但它似乎不喜欢该查询第二部分中的引号。
SELECT title, ts_headline(article, keywords) AS result, rank
FROM (
SELECT keywords, article, title, phrase, ts_rank(phrase, keywords, 2) AS rank
FROM (
SELECT first_name || ' ' || last_name AS title, description AS article, to_tsvector(description) AS phrase
FROM news.stories
) c, to_tsquery('europe | "hard brexit"') AS keywords
WHERE phrase @@ keywords
ORDER BY rank desc
LIMIT 10
) r;
我的问题:是否可以在全文搜索中使用完全匹配?如果不是,如何在 Postgresql 中实现布尔文本搜索?
编辑:我尝试了完全匹配:to_tsquery('europe | hard <-> brexit'),但我不确定这与实际的完全匹配有什么相似之处。
【问题讨论】:
-
你试过websearch_to_tsquery功能吗? postgresql.org/docs/11/textsearch-controls.html 那个处理双引号。
-
@Jeremy 我不知道,但它似乎确实遇到了同样的问题,
hard <-> brexit与"hard brexit"不同,因为驱动力是词位,这意味着像“fox trot”这样的搜索会找到并返回“foxes trot”,这对于完全匹配是完全不可接受的。即完全匹配将被视为模糊匹配。 -
您可以指定简单的配置。我相信这只是将所有内容都转换为小写。这将返回 false: select websearch_to_tsquery('simple', '"fox trot"') @@ to_tsvector('simple', 'the Foxes trot') ;
-
谢谢,我试试看。
-
@LaurenzAlbe 我已经测试过了,它按预期工作,如果您想将您的评论扩展为答案,我会将其标记为正确。
标签: postgresql