ruby-on-rails-3 – 使用pg_search结果顺序进行Postgresql trigr
我在rails上使用pg_search gem实现了一个trigram搜索.
https://github.com/Casecommons/pg_search
问题是,根据显示gem文档的trigram搜索的定义,有时返回结果的顺序似乎不正确:
我的应用程序从用户接收字符串输入(“111 Streetname”)并返回与Address.full_string值匹配的地址列表,并使用trigram进行近似搜索. 搜索示例列表 Trigram搜索:“1493 cambrid” >结果: > 100 Cambridgeside Pl Trigram搜索:“1493 cambr” >结果: > 1493 Cambridge St. Trigram搜索:“1493 cambri” >结果: > 1575 Cambridge St Trigram搜索:“1493 cambridge” >结果: > 1493 Cambridge St. 题 ?为什么不是“1493 Cambridge St”总是在结果之上? ?我是否需要更改trigram搜索的查询,还是仅仅是算法的工作方式? 查询示例 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上引用手册时,实际上您正在使用
text search中的ts_rank()函数.
如果您按顺序订购结果 (addresses.full_string <-> '1493 cambridge') ……你得到了你所要求的. 您可能还想在WHERE子句中使用%(“similarity”)运算符.理想情况下,您将在列上使用带有gist_trgm_ops的GiST索引. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |