gpt4 book ai didi

ruby-on-rails-3 - 具有 pg_search 结果顺序的 Postgresql trigram 文本搜索

转载 作者:行者123 更新时间:2023-11-29 11:35:29 29 4
gpt4 key购买 nike

我在 Rails 上使用 pg_search gem 实现了三元组搜索。 https://github.com/Casecommons/pg_search

问题是有时返回结果的顺序根据显示 gem 文档的 trigram 搜索的定义似乎不正确:

Trigram search works by counting how many three-letter substrings (or “trigrams”) match between the query and the text.

我的应用程序接收来自用户的字符串输入(“111 Streetname”)并返回与 Address.full_string 值匹配的地址列表,并使用三元组进行近似搜索。

搜索示例列表

八卦搜索:“1493 cambrid”

  • 结果:
    • 100 Cambridgeside Pl
    • 100 Cambridgeside Pl
    • 150 Cambridgepark 博士
    • 剑桥街 1575 号
    • 剑桥街 1573 号
    • 剑桥街 1493 号

八卦搜索:“1493 cambr”

  • 结果:
    • 剑桥街 1493 号

八卦搜索:“1493 cambri”

  • 结果:
    • 剑桥街 1575 号
    • 剑桥街 1573 号
    • 剑桥街 1493 号

八卦搜索:“1493 cambridge”

  • 结果:
    • 剑桥街 1493 号
    • 5 Cambridgepark 博士
    • 7 Cambridgepark 博士
    • 100 Cambridgeside Pl
    • 还有更多

问题

¿ 为什么“1493 Cambridge St”不总是位于结果的最前面? ¿我需要更改三元组搜索的查询还是算法的工作方式?

查询示例

SELECT "addresses".*, (ts_rank((to_tsvector('simple', coalesce("addresses"."full_string"::text, ''))), (to_tsquery('simple', ''' ' || '1493' || ' ''') && to_tsquery('simple', ''' ' || 'cambridge' || ' ''')), 0)) AS pg_search_rank FROM "addresses" WHERE (((coalesce("addresses"."full_string"::text, '')) % '1493 cambridge')) ORDER BY pg_search_rank DESC, "addresses"."id" ASC

最佳答案

当您在 trigram search 上引用手册时, 你实际上是在使用 ts_rank()来自 text search 的功能.

如果您按以下顺序排序结果

(addresses.full_string <-> '1493 cambridge')

...你得到你所要求的。
<-> being the trigram "distance" operator.

您可能还想使用 % WHERE 中的(“相似性”)运算符条款。理想情况下,您将拥有 gist_trgm_ops 的 GiST 索引。在专栏上。

关于ruby-on-rails-3 - 具有 pg_search 结果顺序的 Postgresql trigram 文本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14403206/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com