6

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 を使用してこれを達成したいと考えています。

4

1 に答える 1