【发布时间】:2015-01-16 16:48:52
【问题描述】:
我正在处理的 Rails 项目正在使用 Solr 搜索,但在输入某些数据时搜索功能不会返回结果。
如果传递了电子邮件、guid(全局唯一标识符)、电话号码或客户信用卡的最后 4 位,则搜索功能应返回结果。目前它只适用于电子邮件或 guid。
我什至不知道从哪里开始进行故障排除,因为每次我搜索 Solr 搜索时,我都会返回项目未使用的太阳黑子 gem 的结果。
应用控制器中包含的 Solr 搜索模块如下所示:
module SolrSearch
def solr_query(query_string)
query_string << "&fq=publisher_name:#{UMS[:publisher_name]}"
uri = SOLR_URL + "/select/?version=2.2&start=0&rows=100&indent=on&qt=dismax&wt=json&fl=id,guid,email,user_name,publisher_name,csg_id,state,created_at&q=#{query_string.downcase.strip}"
response = Curl::Easy.http_get(URI.escape(uri))
result = JSON.parse(response.body_str)
return result
end
end
如果我没有在搜索字段中输入任何内容,我会返回一个包含 guid、user_name、email、publisher_name、state 和 created_at 的用户数组。
我的 gemfile 看起来像:
source 'https://rubygems.org'
gem 'rails', '3.2.13'
gem "cancan"
gem 'curb', '0.8.1'
gem 'haml', '4.0.0'
gem 'jquery-rails'
gem 'json', '1.7.7'
gem 'oauth', '0.4.7'
gem 'ohm'
gem 'omniauth', '>= 1.0.0'
gem "omniauth_crowd", '2.1.1'
gem 'recurly', :git => "https://github.com/sherbet/recurly-client-ruby.git", :branch => 'sherbet-2.1.9.4'
gem 'redis'
gem 'sidekiq', '3.2.1'
gem 'rest-client', '~> 1.7.2'
gem 'slim', '>= 1.1.0'
gem 'sinatra', '>= 1.3.0', :require => nil
gem 'typhoeus', '0.5.3'
gem 'money'
gem 'newrelic_rpm'
gem 'uuidtools', '2.1.3'
gem "vertex", :git => "git@github.com:sherbet/vertex.git", :branch => "releases/1.0.0"
gem 'unicorn'
gem 'whenever', :require => false
gem 'cellophane', :git => "git@github.com:sherbet/cellophane.git", :require => 'cellophane', :branch => "convert_gem"
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'uglifier', '>= 1.0.3'
end
group :development do
gem 'pry'
gem 'pry-doc'
gem 'pry-rails'
gem 'pry-nav'
end
# For Code Climate
gem "codeclimate-test-reporter", group: :test, require: nil
group :test do
gem 'cucumber-rails', '1.4.0', :require => false
gem 'rspec-rails'
gem 'pickle', '0.4.11'
gem 'capybara', '2.2.1'
gem 'chromedriver-helper'
gem 'launchy', '2.4.2'
gem 'selenium-webdriver', '2.41.0'
gem 'timecop', '0.7.1'
gem 'vcr', '2.9.0'
gem 'webmock', '1.17.4'
gem 'factory_girl_rails','~> 4.0'
gem 'database_cleaner', '1.2.0'
gem 'json_spec', '~> 1.1'
gem 'simplecov'
gem 'simplecov-rcov'
end
group :development, :test do
gem 'ci_reporter_cucumber'
gem 'ci_reporter_rspec'
gem 'capistrano-rails'
gem 'capistrano3-unicorn'
gem 'capistrano-bundler'
gem 'capistrano-rvm'
end
显然我已经尝试将 phone_number 添加到 URI 字符串,但没有奏效。
如何开始解决此问题?
根据 Tinman 的建议,我尝试使用 URI 类对查询字符串进行编码。我做到了:
module SolrSearch
require 'uri'
def solr_query(query_string)
uri = URI.parse(SOLR_ICEBOX_URL)
uri.query = URI.encode_www_form(
'fq' => "publisher_name:#{UMS[:publisher_name]}",
'version' => 2.2,
'start' => 0,
'rows' => 100,
'indent' => 'on',
'qt' => 'dismax',
'wt' => 'json',
'fl' => 'id,guid,email,user_name,publisher_name,csg_id,state,created_at',
'q' => query_string.downcase.strip
)
result = JSON.parse(response.body)
end
end
【问题讨论】:
-
没有必要用“编辑:”标记部分。如果我们好奇的话,我们可以看到编辑历史。相反,我使用“---”(3 个破折号)在输出中强制使用
<hr>标记,这样就可以进行某种描述,而不会像“编辑:”那样明显
标签: ruby-on-rails ruby solr