Postgres 全文与 Rails 3 中的部分单词不匹配?
我刚刚从 MySQL 迁移到 Postgres 9.0.3。我有一个全新的应用程序,其中有一些数据(游戏数据)。
无论如何,我似乎无法搜索到部分单词。这是我的搜索方法:
def self.search(query)
conditions = <<-EOS
to_tsvector('english', title) @@ plainto_tsquery('english', ?)
EOS
find(:all, :conditions => [conditions, query])
end
我确信我需要一个通配符,但我刚刚学习 Postgres。
当我搜索 Shinobi
时,我得到了正确的结果:
忍者世界中的亚历克斯·基德 - 世嘉大师系统
Shinobi - 世嘉大师系统
Shinobi - 任天堂娱乐系统
网络忍者:忍者第 2 部分 - Sega Master 系统
但是当我搜索 Shin
时我什么也没得到?
感谢您提供任何线索。
I just moved from MySQL to Postgres 9.0.3. I have a brand new app with a little data (game data).
Anyway, I can't seem to get partial words to search. Here is my search method:
def self.search(query)
conditions = <<-EOS
to_tsvector('english', title) @@ plainto_tsquery('english', ?)
EOS
find(:all, :conditions => [conditions, query])
end
I'm sure I need a wildcard in there but I'm just learning Postgres.
When I search for Shinobi
I get the correct results:
Alex Kidd in Shinobi World - Sega Master System
Shinobi - Sega Master System
Shinobi - Nintendo Entertainment System
The Cyber Shinobi: Shinobi Part 2 - Sega Master System
But when I search for Shin
I get nothing?
Thanks for any clues.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我认为要允许前缀匹配,您需要使用 to_tsquery 而不是 plainto_tsquery
,它表示 http://www.postgresql.org/docs/current/static/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES
所以你的代码可能是这样的
I think that to allow prefix matching you need to use to_tsquery instead of plainto_tsquery
that says http://www.postgresql.org/docs/current/static/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES
so your code could be something like
您还可以使用正则表达式搜索,如下所示。
You can also use a regular expression search as shown below.
将
*
附加到您的查询字符串。搜索
Shin*
。Append a
*
to your query string.Search for
Shin*
.使用
前缀
:Use the
prefix
: