ruby-on-rails 使用pg_search进行子字符串搜索

piok6c0g  于 2022-11-26  发布在  Ruby
关注(0)|答案(1)|浏览(151)

我正在使用pg_search搜索产品:

class Product
  include PgSearch

  pg_search_scope(
    :search_for,
    against: %i(sku),
    associated_against: { translations: [:name, :description] },
    using: { tsearch: { prefix: true } }
  )
end

到目前为止,这个方法运行得很好。但是我想添加一个选项来搜索部分关键字,这样客户就可以通过键入“45678”来找到sku为“123456789”的产品。使用LIKE很容易做到这一点,但无法将其与pg_search组合在一起,因此结果将被组合在一起并进行排名。
如何让pg_search通过部分字符串查找产品?

lsmepo6l

lsmepo6l1#

PostGres的pg_trgm扩展将允许您在word_similarity属性设置为true的字符串内进行模糊搜索。
1.生成迁移

rails g migration AddPgTrgmExtensionToDB

1.迁移文件

class AddPgTrgmExtensionToDb < ActiveRecord::Migration[7.0]
      def change
        enable_extension 'pg_trgm'
      end
    end

1.根据pg_search docs定义PG搜索范围

pg_search_scope :search_for, against: :sku, using: { trigram: { word_similarity: true } }

相关问题