【问题标题】:Exact match on full text search全文搜索完全匹配
【发布时间】: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


【解决方案1】:

您的主要问题似乎是词干;使用<-> 进行短语搜索应该可以按照您的意愿进行。

您可以使用不包含词干词典的文本搜索配置来避免词干提取(例如simple)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2020-04-18
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多