使用 pg_search 进行子字符串搜索

csc*_*sch 6 ruby-on-rails rails-postgresql pg-search

我用来pg_search搜索产品:

class Product
  include PgSearch

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

到目前为止效果很好。但我想添加搜索部分关键字的选项,以便客户可以通过输入“45678”找到具有 sku“123456789”的产品。这很容易做到LIKE,但找不到将其与 结合起来的方法pg_search,因此将结果组合并一起排名。

如何pg_search通过部分字符串查找产品?

vla*_*iim 0

PostGres 的pg_trgmword_similarity扩展将允许您在属性设置为的字符串内进行模糊搜索true

  1. 生成迁移
    rails g migration AddPgTrgmExtensionToDB
Run Code Online (Sandbox Code Playgroud)
  1. 迁移文件
    class AddPgTrgmExtensionToDb < ActiveRecord::Migration[7.0]
      def change
        enable_extension 'pg_trgm'
      end
    end
Run Code Online (Sandbox Code Playgroud)
  1. 根据pg_search 文档定义 PG 搜索范围
    pg_search_scope :search_for, against: :sku, using: { trigram: { word_similarity: true } }
Run Code Online (Sandbox Code Playgroud)