当我插入超过100,000条记录时,我似乎遇到了这个错误。我知道它可以支持更多的方式。错误在下面,是相关类的代码。
2015-07-01 08:14:24.512:INFO:/:Started GET "/search?type=digital_object" for 129.118.15.44 at 2015-07-01 08:14:24 -0500|
2015-07-01 08:14:24.512:INFO:/:Processing by SearchController#search as HTML|
2015-07-01 08:14:24.512:INFO:/: Parameters: {"type"=>"digital_object"}|
Jul 01, 2015 8:14:24 AM org.apache.solr.core.SolrCore execute
INFO: [collection1] webapp= path=/select params={facet=true&sort=title_sort+asc&facet.limit=100&qf=four_part_id^3+title^2+finding_aid_filing_title^2+fullrecord&wt=json&rows=10&defType=edismax&pf=four_part_id^4&start=0&q=*:*&facet.field=repository&facet.field=primary_type&facet.field=subjects&facet.field=source&facet.field=linked_agent_roles&fq=types:("digital_object")&fq=-exclude_by_default:true&fq=publish:true} hits=203799 status=0 QTime=15
2015-07-01 08:14:24.590:INFO:/: Rendered G:/archivesspace/plugins/vva/public/views/search/_components_switch.html.erb (15.0ms)|
2015-07-01 08:14:24.590:INFO:/: Rendered search/_filter.html.erb (0.0ms)|
2015-07-01 08:14:24.606:INFO:/: Rendered search/_pagination_summary.html.erb (16.0ms)|
2015-07-01 08:14:24.637:INFO:/: Rendered search/_inline_results.html.erb (47.0ms)|
2015-07-01 08:14:24.637:INFO:/: Rendered search/results.html.erb within layouts/application (62.0ms)|
2015-07-01 08:14:24.653:INFO:/:Completed 500 Internal Server Error in 141.0ms|
2015-07-01 08:14:24.653:INFO:/:|ActionView::Template::Error (undefined method `strip!' for nil:NilClass):|
17: <% elsif result["primary_type"] === "repository" %>|
18: <%= link_to result['title'], :controller => :search, :action => :repository, :repo_id => id %>|
19: <% else %>|
20: <%= link_to title_or_finding_aid_filing_title( result ) , :controller => :records, :action => result["primary_type"], :id => id, :repo_id => repo_id %>|
21: <% end %>|
22: </h3>|
23: <div class="result-summary">| app/helpers/application_helper.rb:22:in `title_or_finding_aid_filing_title'|
app/views/search/_inline_results.html.erb:20:in `_app_views_search__inline_results_html_erb___996910774_15116'|
app/views/search/_inline_results.html.erb:5:in `_app_views_search__inline_results_html_erb___996910774_15116'|
app/helpers/application_helper.rb:134:in `render_aspace_partial'|
app/views/search/results.html.erb:13:in `_app_views_search_results_html_erb__332589766_15048'|
app/controllers/search_controller.rb:21:in `search'|
app/controllers/search_controller.rb:20:in `search'|||
_inline_results.html.erb
<div class="search-results">
<% if search_data.results? %>
<%= render_aspace_partial :partial => "search/pagination_summary", :locals => {:search_data => search_data} %>
<ul class="results-list">
<% search_data['results'].each do |result| %>
<%
id = JSONModel(result["primary_type"]).id_for(result['uri'])
repo_id = JSONModel(:repository).id_for(JSONModel.repository_for(result['uri']),{}, true)
%>
<li class="result">
<h3>
<%= icon_for result["primary_type"] %>
<% if result["primary_type"] === "subject" %>
<%= link_to result["title"], {"filter_term" => search_data.facet_query_string("subjects", result["title"])} %>
<% elsif ["agent_person", "agent_software", "agent_family", "agent_corporate_entity"].include?(result["primary_type"]) %>
<%= link_to result['title'], :controller => :records, :action => :agent, :id => id, :agent_type => result["primary_type"] %>
<% elsif result["primary_type"] === "repository" %>
<%= link_to result['title'], :controller => :search, :action => :repository, :repo_id => id %>
<% else %>
<%= link_to title_or_finding_aid_filing_title( result ) , :controller => :records, :action => result["primary_type"], :id => id, :repo_id => repo_id %>
<% end %>
</h3>
<div class="result-summary">
<%= render_aspace_partial :partial => "search/result_summary_#{result["primary_type"]}", :locals => {:obj => result} %>
</div>
</li>
<% end %>
</ul>
<%= render_aspace_partial :partial => "search/pagination", :locals => {:search_data => search_data} %>
<% else %>
<p class="alert alert-info">
<%= I18n.t("search_results.no_results") %></em>.
</p>
<% end %>
</div>
search_controller.rb
require 'advanced_query_builder'
class SearchController < ApplicationController
DETAIL_TYPES = ['accession', 'resource', 'archival_object', 'digital_object',
'digital_object_component', 'classification',
'agent_person', 'agent_family', 'agent_software', 'agent_corporate_entity']
VIEWABLE_TYPES = ['agent', 'repository', 'subject'] + DETAIL_TYPES
FACETS = ["repository", "primary_type", "subjects", "source", "linked_agent_roles"]
def search
set_search_criteria
@search_data = Search.all(@criteria, @repositories)
@term_map = params[:term_map] ? ASUtils.json_parse(params[:term_map]) : {}
respond_to do |format|
format.html { render "search/results" }
format.js { render_aspace_partial :partial => "search/inline_results", :content_type => "text/html", :locals => {:search_data => @search_data} }
end
end
def advanced_search
set_advanced_search_criteria
@search_data = Search.all(@criteria, @repositories)
render "search/results"
end
def repository
set_search_criteria
if params[:repo_id].blank?
@search_data = Search.all(@criteria.merge({"facet[]" => [], "type[]" => ["repository"]}), {})
return render "search/results"
end
@repository = @repositories.select{|repo| JSONModel(:repository).id_for(repo.uri).to_s === params[:repo_id]}.first
@breadcrumbs = [
[@repository['repo_code'], url_for(:controller => :search, :action => :repository, :id => @repository.id), "repository"]
]
@search_data = Search.repo(@repository.id, @criteria, @repositories)
render "search/results"
end
private
def set_search_criteria
@criteria = params.select{|k,v|
["page", "q", "type", "sort",
"filter_term", "root_record", "format"].include?(k) and not v.blank?
}
@criteria["page"] ||= 1
@criteria["sort"] = "title_sort asc" unless @criteria["sort"] or @criteria["q"] or params["advanced"].present?
if @criteria["filter_term"]
@criteria["filter_term[]"] = Array(@criteria["filter_term"]).reject{|v| v.blank?}
@criteria.delete("filter_term")
end
if params[:type].blank?
@criteria['type[]'] = DETAIL_TYPES
else
@criteria['type[]'] = Array(params[:type]).keep_if {|t| VIEWABLE_TYPES.include?(t)}
@criteria.delete("type")
end
@criteria['exclude[]'] = params[:exclude] if not params[:exclude].blank?
@criteria['facet[]'] = FACETS
end
def set_advanced_search_criteria
set_search_criteria
terms = (0..2).collect{|i|
term = search_term(i)
if term and term["op"] === "NOT"
term["op"] = "AND"
term["negated"] = true
end
term
}.compact
if not terms.empty?
@criteria["aq"] = AdvancedQueryBuilder.new(terms, :public).build_query.to_json
@criteria['facet[]'] = FACETS
end
end
def search_term(i)
if not params["v#{i}"].blank?
{ "field" => params["f#{i}"], "value" => params["v#{i}"], "op" => params["op#{i}"], "type" => "text" }
end
end
end
application_helper.rb
module ApplicationHelper
def include_theme_css
css = ""
css += stylesheet_link_tag("themes/#{ArchivesSpacePublic::Application.config.public_theme}/bootstrap", :media => "all")
css += stylesheet_link_tag("themes/#{ArchivesSpacePublic::Application.config.public_theme}/application", :media => "all")
css.html_safe
end
def set_title(title)
@title = title
end
def title_or_finding_aid_filing_title(resource)
if resource["finding_aid_filing_title"] && !resource["finding_aid_filing_title"].nil? && resource["finding_aid_filing_title"].length > 0
title = resource["finding_aid_filing_title"]
elsif resource["title"] && !resource["title"].nil?
title = resource["title"]
else
title = resource["display_string"]
end
MixedContentParser::parse(title, url_for(:root))
end
def icon_for(type)
"<span class='icon-#{type}' title='#{I18n.t("#{type}._singular")}'></span>".html_safe
end
def label_and_value(label, value)
return if value.blank?
label = content_tag(:dt, label)
value = content_tag(:dd, value)
label + value
end
def i18n_enum(jsonmodel_type, property, value)
return if value.blank?
property_defn = JSONModel(jsonmodel_type).schema["properties"][property]
return if property_defn.nil?
if property_defn.has_key? "dynamic_enum"
enum_key = property_defn["dynamic_enum"]
#return "enumerations.#{enum_key}.#{value}"
I18n.t("enumerations.#{enum_key}.#{value}", :default => value)
else
I18n.t("#{jsonmodel_type}.#{property}_#{value}", :default => value)
end
end
def params_for_search(opts = {})
search_params = {
:controller => :search,
:action => :search
}
search_params["filter_term"] = Array(opts["filter_term"] || params["filter_term"]).clone
search_params["filter_term"].concat(Array(opts["add_filter_term"])) if opts["add_filter_term"]
search_params["filter_term"] = search_params["filter_term"].reject{|f| Array(opts["remove_filter_term"]).include?(f)} if opts["remove_filter_term"]
search_params["sort"] = opts["sort"] || params["sort"]
search_params["q"] = opts["q"] || params["q"]
search_params["format"] = params["format"]
search_params["root_record"] = params["root_record"]
search_params["agent_type"] = params["agent_type"]
search_params["page"] = opts["page"] || params["page"] || 1
if opts["type"] && opts["type"].kind_of?(Array)
search_params["type"] = opts["type"]
else
search_params["type"] = opts["type"] || params["type"]
end
search_params["term_map"] = params["term_map"]
# retain any advanced search params
advanced = (opts["advanced"] || params["advanced"])
search_params["advanced"] = advanced.blank? || advanced === 'false' ? false : true
search_params[:action] = :advanced_search if search_params["advanced"]
(0..2).each do |i|
search_params["v#{i}"] = params["v#{i}"]
search_params["f#{i}"] = params["f#{i}"]
search_params["op#{i}"] = params["op#{i}"]
end
search_params.reject{|k,v| k.blank? or v.blank?}
end
def set_title_for_search
title = I18n.t("actions.search")
if @search_data
if params[:type] && !@search_data.types.blank?
title = "#{I18n.t("search_results.searching")} #{@search_data.types.join(", ")}"
end
facets_to_display = []
if @search_data.query?
facets_to_display << @search_data.facet_label_for_query
end
if @search_data.filtered_terms?
facets_to_display << @search_data[:criteria]["filter_term[]"].collect{|filter_term| @search_data.facet_label_for_filter(filter_term)}
end
if facets_to_display.length > 0
title += " | #{facets_to_display.join(", ")}"
end
end
set_title(title)
end
def truncate(string, length = 50, trailing = '…')
return string if string.length < length
"#{string[0..50]}#{trailing}".html_safe
end
# See: ApplicationController#render_aspace_partial
def render_aspace_partial(args)
defaults = {:formats => [:html], :handlers => [:erb]}
return render(defaults.merge(args))
end
def proxy_localhost?
AppConfig[:frontend_proxy_url] =~ /localhost/
end
end
答案 0 :(得分:1)
错误发生在_inline_results.html.erb ...
中<% elsif result["primary_type"] === "repository" %>
<%= link_to result['title'], :controller => :search, :action => :repository, :repo_id => id %>
错误是结果['title']为零。所以,添加这行代码......
<% elsif result["primary_type"] === "repository" %>
<% if !result['title'].blank? %>
<%= link_to result['title'], :controller => :search, :action => :repository, :repo_id => id %>
<% end %>
答案 1 :(得分:0)
我明白了。看起来导入的一些数据有空白标题“”。通过更新它们就可以工作了。