【问题标题】:How to implement database search like this with Rails?如何用 Rails 实现这样的数据库搜索?
【发布时间】:2011-10-24 19:34:25
【问题描述】:

我正在使用 Ruby on Rails 开发我的第一个网站。这个想法是一个营养“搜索引擎”,您可以在其中搜索食物,然后网络应用程序会将您带到包含有关该食物的营养信息的页面或搜索结果页面(如果不存在精确匹配)。

到目前为止,我已经创建了营养信息数据库(使用 Postgresql)并添加了一些测试数据。这是我用来为数据库创建脚手架的命令:

rails generate scaffold Food name:string calories:decimal portion_name:string \
portion:decimal image_url:string description:text

然后我创建了索引页面。这是我用来创建索引的命令:

rails generate controller home index 

我删除了public/index.html 并修改了config/routes.rb 以包含这一行:

root :to => 'home#index'

在此之后,我将搜索表单添加到app/views/home/index.html.erb,如下所示:

<div id="search">
  <h1>How many calories are in... ?</h1>
  <%= form_tag("/search", :method => "get") do %>
    <%= text_field_tag "q", nil, :class => "span6" %>
    <%= submit_tag("Go", :name => nil) %>
  <% end %>
</div>

现在,我想连接这个搜索表单,这样,如果与搜索查询完全匹配或接近匹配,用户会被直接路由到显示该食物信息(来自数据库)的页面.如果没有完全匹配,我希望向用户显示结果页面以及每个结果的营养页面链接。

如何实现此功能?我尝试在 Google 上搜索有关使用 Rails 实现搜索的文章,并且还观看了截屏视频,但我找到的资源都没有实现我想要的。

到目前为止,这里是项目的 GitHub 链接:https://github.com/robertseaton/nutrition-project

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1


    【解决方案1】:

    我使用Thinking-Sphinx 在 Rails 中进行搜索 - Sphinx 是一个开源搜索服务器。你可以定义你希望你的搜索如何在 Rails 中正常工作。

    【讨论】:

    • 我只对搜索一个字段感兴趣,所以我认为使用 Sphinx 会有点矫枉过正。
    • 您要为该字段编制索引吗?如果您要按“名称”字段中的任何单词进行搜索并且想要可伸缩性,则需要保留该字段中单词的索引。这就是 Sphinx 所做的(除其他外)。如果您不索引单个单词但想按它们进行搜索,您最终将按顺序扫描该列中的每个单词。
    【解决方案2】:

    您还可以使用太阳黑子来满足您的搜索需求。这里是太阳黑子的github链接https://github.com/sunspot/sunspot

    使用太阳黑子,您可以指定要搜索的所有项目,如食物、卡路里等,并为这些项目赋予不同的权重,以便如果有关键字匹配,让我们说食物和蛋白质之间应该显示哪个结果顶部。

    github 上的 sunspot wiki 有很多资源可以帮助您入门,而且实现起来非常直观:)。

    谢谢,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-09
      • 2010-11-08
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2019-04-15
      • 2016-02-21
      • 1970-01-01
      相关资源
      最近更新 更多