Rails アプリで pg_search gem を使用して、ユーザー (経歴と関連するスキル モデル) を検索しています。ユーザーは開発者なので、そのスキルには「CSS」、「C++」、「C#」、「Objective C」などがあります...
最初は次の検索範囲を使用していました。
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 を使用してこれを達成したいと考えています。