【问题标题】:Rails tokenized text search across fields with performance in mindRails 跨字段的标记化文本搜索,考虑到性能
【发布时间】:2012-01-30 16:07:53
【问题描述】:

我在 Heroku 上有一个 Rails 应用程序,我希望提高搜索的用户友好性。为此,我想允许他们通过关联在多个模型上的多个字段中进行文本搜索。来自用户的输入可以是来自任何这些字段的文本(通常可能跨越多个字段),没有特定的顺序。

示例:如果您有一个汽车数据库并希望允许用户搜索“Honda Fit 2011”,其中“Honda”来自制造商表,“Fit”来自模型表,“2011”来自model_year 表。

我想我需要在根记录上构建一个字段,其中包含每个字段的唯一单词列表,然后标记用户的输入。但这会导致我使用IN 子句,我不确定它是否可以从pg_search 等全文搜索插件中受益。

那么,我的问题是在 Rails 中激活这样的搜索的好方法是什么?

【问题讨论】:

  • 对所有模型进行全文搜索并不能解决您的问题?
  • 全文搜索通常是您交给外部工具的任务。你可能想看看 solr/lucene、sphinx 或弹性搜索。
  • @Tass 跨多个模型的全文,如果我没记错的话,总是会从不同的表中返回项目。我可能不清楚:在我的汽车示例中,我总是想返回 model_year 记录。因此,搜索“honda”将带回通过关联可以追溯到“honda”制造商的所有 model_years。

标签: ruby-on-rails activerecord heroku full-text-search


【解决方案1】:

我会看看 Sunspot_rails。它使用 Solr 作为其搜索引擎,但允许您以各种果味方式索引内容。例如,我有很简单地用它们的关联索引模型:

searchable do
  text :description
  text :category do
    category.present? ? category.name : ''
  end
end

然后您可以搜索:

TYPES = [Asset,Product]

Sunspot.search(*TYPES) do |q|
  q.fulltext search_str
end

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多