我在Rails应用程序中使用pg_search gem来针对用户 - 他们的BIOS和相关技能模型进行搜索。用户是开发商,所以他们的技能,包括像“CSS”,“C++”,“C#”,“目标C”,等等使用pg_search匹配特殊字符(例如#,+)
我最初用以下搜索范围:
pg_search_scope :search,
against: [:bio],
using: {tsearch: {dictionary: "english", prefix: true}},
associated_against: {user: [:fname, :lname], skills: :name}
但是,如果您在这种情况下搜索“C++”,则会得到包含“CSS”(等等)的结果。我改为使用“简单”的字典的范围和去除前缀:
pg_search_scope :search_without_prefix,
against: [:bio],
using: {tsearch: {dictionary: "simple"}},
associated_against: {user: [:fname, :lname], skills: :name}
这种固定的一些事情 - 例如,搜索“C++”不显示“CSS”。但是,搜索“C++”或“C#”仍然匹配列出了“C”或“Objective C”的用户
我绝对可以做一个基本的ILIKE
匹配,但希望在可能的情况下使用pg_search完成此操作。