我刚刚设置了Sunspot和Solr,为我的Rails应用程序提供了强大的搜索功能。
安装过程很简单,我完成了所有必需的基本操作:
添加宝石
gem 'sunspot_rails'
gem 'sunspot_solr'
gem 'progress_bar'
运行命令
bundle
rails generate sunspot_rails:install
bundle exec rake sunspot:solr:start
rake sunspot:solr:run
rake sunspot:solr:reindex
该级别的一切都很好,我的文档也是正确创建的。
现在进行搜索,效果不佳。这是我在模型和控制器上做的:
Domain.rb
class Domain < ActiveRecord::Base
searchable do
text :name, stored: true
end
end
HomeController.rb
class HomeController < ApplicationController
def index
@domains = Domain.search do
fulltext params[:q], fields: [:name], highlight: true
paginate page: params[:page], per_page: 12
end
end
end
我的实际数据是域名列表(例如,google.com,facebook.com等等)
goo
时,它不会返回任何内容。google.com
时,会找到google.com
。我意识到通过用fulltext
包围*
参数,它确实产生了与SELECT * FROM domains WHERE name LIKE '%:name%'
类似的东西。
@domains = Domain.search do
fulltext "*#{params[:q]}*", fields: [:name], highlight: true
paginate page: params[:page], per_page: 12
end
但是,如果我搜索多个单词great pizza
(希望找到例如great-super-giant-pizza.com
),这不起作用。
我可能错过了Sunspot / Solr设置的一点。
有什么想法吗?
编辑
为了澄清这种情况,我甚至试图进行简单的搜索,例如:
Domain.search { fulltext 'great pizza' }
如示例所示。这是行不通的。 Sunspot / Solr实际上是在尝试找到与great pizza
完全匹配的文本,而不是找到与这两个单词匹配的文本