From b6541aa0a71151ae89c3c2d039b424f5a54feefa Mon Sep 17 00:00:00 2001 From: Erik Hatcher Date: Sun, 25 Feb 2007 20:37:06 +0000 Subject: [PATCH] * Added DocumentController to control search results detail rendering. SOLR_ENV selects one of the Solr environment configuration mappings defined in environment.rb ('development' by default). solr.yml eliminated (Ruby is a fine configuration language!). * With the new DocumentController, a few custom results views have been added, one for UVa data (linking to VIRGO), Tang poetry example (blending multiple languages), and a default development one that shows all fields returned by Solr. * Added paging to search results, finally. * Configured in-place-editor of query to redirect, thereby refreshing the view with the changed criteria. * Set Simile Exhibit/Timeline field mappings to MARC data example. git-svn-id: https://svn.apache.org/repos/asf/lucene/solr/trunk@511599 13f79535-47bb-0310-9956-ffa450edef68 --- .../app/controllers/browse_controller.rb | 19 +++++++++--- .../app/controllers/document_controller.rb | 20 +++++++++++++ .../ruby/flare/app/views/browse/index.rhtml | 20 ++++--------- .../views/document/document_development.rhtml | 12 ++++++++ .../app/views/document/document_tang.rhtml | 30 +++++++++++++++++++ .../app/views/document/document_uva.rhtml | 23 ++++++++++++++ .../ruby/flare/app/views/simile/exhibit.rhtml | 2 +- .../ruby/flare/app/views/simile/timeline.rxml | 7 ++--- client/ruby/flare/config/environment.rb | 24 ++++++++++++--- client/ruby/flare/config/solr.yml | 8 ----- client/ruby/flare/script/pie.rb | 5 ++-- 11 files changed, 132 insertions(+), 38 deletions(-) create mode 100755 client/ruby/flare/app/controllers/document_controller.rb create mode 100755 client/ruby/flare/app/views/document/document_development.rhtml create mode 100755 client/ruby/flare/app/views/document/document_tang.rhtml create mode 100755 client/ruby/flare/app/views/document/document_uva.rhtml delete mode 100755 client/ruby/flare/config/solr.yml diff --git a/client/ruby/flare/app/controllers/browse_controller.rb b/client/ruby/flare/app/controllers/browse_controller.rb index 98a01dd0922..40107162ffa 100644 --- a/client/ruby/flare/app/controllers/browse_controller.rb +++ b/client/ruby/flare/app/controllers/browse_controller.rb @@ -4,8 +4,6 @@ class BrowseController < ApplicationController before_filter :flare_before - # TODO: use in-place-editor for queries, allowing editing of them (instead of remove and re-add new one) - # def self.flare(options={}) # define_method() do # end @@ -20,9 +18,18 @@ class BrowseController < ApplicationController @info = solr(Solr::Request::IndexInfo.new) # TODO move this call to only have it called when the index may have changed @facet_fields = @info.field_names.find_all {|v| v =~ /_facet$/} @text_fields = @info.field_names.find_all {|v| v =~ /_text$/} - + + session[:page] = params[:page].to_i if params[:page] + session[:page] = 1 if session[:page] <= 0 + + @results_per_page = 25 + + @start = (session[:page] - 1) * @results_per_page + 1 + request = Solr::Request::Standard.new(:query => query, :filter_queries => filters, + :rows => @results_per_page, + :start => @start, :facets => {:fields => @facet_fields, :limit => 20 , :mincount => 1, :sort => :count, :debug_query=>true}, :highlighting => {:field_list => @text_fields}) logger.info({:query => query, :filter_queries => filters}.inspect) @@ -50,7 +57,9 @@ class BrowseController < ApplicationController def update_query logger.debug "update_query: #{params.inspect}" session[:queries][params[:index].to_i][:query] = params[:value] - render :layout => false, :text => params[:value] + render :update do |page| + page.redirect_to '/browse' + end end def invert_query @@ -83,6 +92,7 @@ class BrowseController < ApplicationController def clear session[:queries] = nil session[:filters] = nil + session[:page] = 1 flare_before redirect_to :action => 'index' end @@ -91,6 +101,7 @@ class BrowseController < ApplicationController def flare_before session[:queries] ||= [] session[:filters] ||= [] + session[:page] ||= 1 end def retrieve_field_facets(field, limit=-1, prefix=nil) diff --git a/client/ruby/flare/app/controllers/document_controller.rb b/client/ruby/flare/app/controllers/document_controller.rb new file mode 100755 index 00000000000..4a8ed0c1165 --- /dev/null +++ b/client/ruby/flare/app/controllers/document_controller.rb @@ -0,0 +1,20 @@ +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +class DocumentController < ApplicationController + def result + @doc = params[:doc] + @response = params[:response] # TODO: FlareContext? + render :template => "document/document_#{SOLR_ENV}" + end +end diff --git a/client/ruby/flare/app/views/browse/index.rhtml b/client/ruby/flare/app/views/browse/index.rhtml index 7220782576f..65343de8f2d 100644 --- a/client/ruby/flare/app/views/browse/index.rhtml +++ b/client/ruby/flare/app/views/browse/index.rhtml @@ -37,7 +37,7 @@ <% session[:queries].each_with_index do |q,i| %> <%=link_to q[:negative] ? "-" : '+', :action => :invert_query, :index => i%> <%=q[:query]%> -<%= in_place_editor "query_#{i}", :url=> url_for(:action=>"update_query", :index=>i) %> +<%= in_place_editor "query_#{i}", :url=> url_for(:action=>"update_query", :index=>i, :script=>true) %> <%=link_to image_tag("x-close.gif"), :action => :remove_query, :index => i %>
<% end %> @@ -60,27 +60,17 @@ -
Results 1-<%=[@response.total_hits,10].min%> of <%=@response.total_hits%>
- +
Results <%=@start%>-<%=[@response.total_hits,@results_per_page + @start -1].min%> of <%=@response.total_hits%>
<% @response.each do |doc| %> - - - + <%= render_component :controller => DocumentController, :action => "result", :params => {:doc => doc, :response => @response} %> <% end %>
- - - - - <% doc.each do |k,v|; highlighting = @response.highlighted(doc['id'], k) %> - - <% end %> -
<%=doc['title_text']%>
<%=k%>:<%= highlighting ? "...#{highlighting}..." : (v.respond_to?('join') ? v.join(',') : v.to_s)%>
-
+
<%=link_to_if session[:page] != 1, "<<", :page => session[:page] - 1%> Results <%=@start%>-<%=[@response.total_hits,@results_per_page + @start -1].min%> of <%=@response.total_hits%><%=link_to_if session[:page] < (@response.total_hits.to_f / @results_per_page).ceil, ">>", :page => session[:page] + 1%>
+ diff --git a/client/ruby/flare/app/views/document/document_development.rhtml b/client/ruby/flare/app/views/document/document_development.rhtml new file mode 100755 index 00000000000..d99f4a9d7b0 --- /dev/null +++ b/client/ruby/flare/app/views/document/document_development.rhtml @@ -0,0 +1,12 @@ + + + + + + + <% @doc.each do |k,v|; highlighting = @response.highlighted(@doc['id'], k) %> + + <% end %> +
<%=@doc['title_text']%>
<%=k%>:<%= highlighting ? "...#{highlighting}..." : (v.respond_to?('join') ? v.join(',') : v.to_s)%>
+ + diff --git a/client/ruby/flare/app/views/document/document_tang.rhtml b/client/ruby/flare/app/views/document/document_tang.rhtml new file mode 100755 index 00000000000..0dc7fde6843 --- /dev/null +++ b/client/ruby/flare/app/views/document/document_tang.rhtml @@ -0,0 +1,30 @@ +<% + body_zh_highlighted = @response.highlighted(@doc['id'], 'body_zh_text') + body_en_highlighted = @response.highlighted(@doc['id'], 'body_en_text') +-%> + + + + + + + + + + + + + + + + +
<%=@doc['title_zh_text']%> (<%=@doc['title_en_text']%>)
author:<%=@doc['author_zh_facet']%> (<%=@doc['author_en_facet']%>)
type:<%=@doc['type_zh_facet']%> (<%=@doc['type_en_facet']%>)
body: +
+ <%= body_zh_highlighted ? "...#{body_zh_highlighted}..." : @doc['body_zh_text'] %> +
+
+ <%= body_en_highlighted ? "...#{body_en_highlighted}..." : @doc['body_en_text'] %> +
+
+ + diff --git a/client/ruby/flare/app/views/document/document_uva.rhtml b/client/ruby/flare/app/views/document/document_uva.rhtml new file mode 100755 index 00000000000..fe454ae4fca --- /dev/null +++ b/client/ruby/flare/app/views/document/document_uva.rhtml @@ -0,0 +1,23 @@ +<% + virgo_link = "http://virgo.lib.virginia.edu/uhtbin/cgisirsi/uva/0/0/5?searchdata1=#{@doc['id'][1..-1]}%7bCKEY%7d" + # url = URI.parse(virgo_link) + # res = Net::HTTP.start(url.host, url.port) {|http| + # http.get("/uhtbin/cgisirsi/uva/0/0/5?searchdata1=#{@doc['id'][1..-1]}{CKEY}") + # } + # availability = Regexp.new("Copy\ info\:(.*)td\>", Regexp::MULTILINE).match(res.body)[1] +%> + + + + + + + <% @doc.each do |k,v|; highlighting = @response.highlighted(@doc['id'], k) %> + + <% end %> + + + +
<%= link_to @doc['title_text'], virgo_link, {:target => "_blank"}%>
<%=k%>:<%= highlighting ? "...#{highlighting}..." : (v.respond_to?('join') ? v.join(',') : v.to_s)%>
+ + diff --git a/client/ruby/flare/app/views/simile/exhibit.rhtml b/client/ruby/flare/app/views/simile/exhibit.rhtml index e0a76862772..bdf54e81d16 100644 --- a/client/ruby/flare/app/views/simile/exhibit.rhtml +++ b/client/ruby/flare/app/views/simile/exhibit.rhtml @@ -16,7 +16,7 @@
-
+
diff --git a/client/ruby/flare/app/views/simile/timeline.rxml b/client/ruby/flare/app/views/simile/timeline.rxml index 629e4905a26..6ce3d2fcdea 100755 --- a/client/ruby/flare/app/views/simile/timeline.rxml +++ b/client/ruby/flare/app/views/simile/timeline.rxml @@ -13,10 +13,9 @@ xml.data do @data.each do |doc| xml.event(doc['title_text'], - :start => doc['published_year_facet'], - :end => doc['published_year_facet'], - :title => doc['title_text'], - :image => "#{doc['asin_text']}") + :start => doc['year_facet'], + :end => doc['year_facet'], + :title => doc['title_text']) end end # Amazon images: http://www.betaversion.org/~stefano/linotype/news/66/ diff --git a/client/ruby/flare/config/environment.rb b/client/ruby/flare/config/environment.rb index 794464963ae..471e034e963 100644 --- a/client/ruby/flare/config/environment.rb +++ b/client/ruby/flare/config/environment.rb @@ -57,8 +57,24 @@ end # $KCODE = 'UTF8' # Rails 1.2 supposedly sets this automatically require 'solr' -solr_environments = YAML.load_file("#{RAILS_ROOT}/config/solr.yml") + + + +solr_environments = { + :development => { + }, + + :uva => { + }, + + :delicious => { + }, + + :tang => { + } +} SOLR_ENV = ENV["SOLR_ENV"] || "development" -SOLR_CONFIG = solr_environments[SOLR_ENV] -puts "SOLR_CONFIG = #{SOLR_CONFIG.to_yaml}" -SOLR = Solr::Connection.new("#{SOLR_CONFIG['solr_url']}") +SOLR_CONFIG = solr_environments[SOLR_ENV.to_sym] +puts "#{SOLR_ENV}: SOLR_CONFIG = #{SOLR_CONFIG.inspect}" +solr_url = SOLR_CONFIG[:solr_url] || "http://localhost:8983/solr" +SOLR = Solr::Connection.new(solr_url) diff --git a/client/ruby/flare/config/solr.yml b/client/ruby/flare/config/solr.yml deleted file mode 100755 index 263ef570b15..00000000000 --- a/client/ruby/flare/config/solr.yml +++ /dev/null @@ -1,8 +0,0 @@ -development: - solr_url: http://localhost:8983/solr - -delicious: - solr_url: http://localhost:8985/solr - -tang: - solr_url: http://localhost:8987/solr diff --git a/client/ruby/flare/script/pie.rb b/client/ruby/flare/script/pie.rb index 44991459873..7f9d94403cd 100755 --- a/client/ruby/flare/script/pie.rb +++ b/client/ruby/flare/script/pie.rb @@ -17,8 +17,9 @@ require 'sparklines' 0.upto(100) do |i| Sparklines.plot_to_file("public/images/pie_#{i}.png", [i], :type => 'pie', - :share_color => "blue" - # :remain_color => "#dcdcdc", :background_color => "#ededed" + :share_color => "#D43D1A", + :remain_color => "#dcdcdc" +# :background_color => "#ededed" ) end