You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by eh...@apache.org on 2007/03/06 20:47:57 UTC
svn commit: r515272 - in /lucene/solr/trunk/client/ruby/flare:
app/controllers/ app/views/browse/ app/views/document/ app/views/simile/
config/ lib/
Author: ehatcher
Date: Tue Mar 6 11:47:55 2007
New Revision: 515272
URL: http://svn.apache.org/viewvc?view=rev&rev=515272
Log:
introduced FlareContext, added saved search feature, and made things more configurable through SOLR_ENV
Added:
lucene/solr/trunk/client/ruby/flare/lib/flare_context.rb (with props)
Modified:
lucene/solr/trunk/client/ruby/flare/app/controllers/application.rb
lucene/solr/trunk/client/ruby/flare/app/controllers/browse_controller.rb
lucene/solr/trunk/client/ruby/flare/app/controllers/simile_controller.rb
lucene/solr/trunk/client/ruby/flare/app/views/browse/facet.rhtml
lucene/solr/trunk/client/ruby/flare/app/views/browse/index.rhtml
lucene/solr/trunk/client/ruby/flare/app/views/document/_document_delicious.rhtml
lucene/solr/trunk/client/ruby/flare/app/views/document/_document_tang.rhtml
lucene/solr/trunk/client/ruby/flare/app/views/simile/exhibit.rhtml
lucene/solr/trunk/client/ruby/flare/app/views/simile/timeline.rhtml
lucene/solr/trunk/client/ruby/flare/config/environment.rb
lucene/solr/trunk/client/ruby/flare/config/routes.rb
Modified: lucene/solr/trunk/client/ruby/flare/app/controllers/application.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/app/controllers/application.rb?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/app/controllers/application.rb (original)
+++ lucene/solr/trunk/client/ruby/flare/app/controllers/application.rb Tue Mar 6 11:47:55 2007
@@ -16,32 +16,16 @@
class ApplicationController < ActionController::Base
# Pick a unique cookie name to distinguish our session data from others'
session :session_key => '_flare_session_id'
+
+ before_filter :flare_before
+
private
- def query
- queries = session[:queries]
- if queries.nil? || queries.empty?
- query = "*:*"
- else
- query = session[:queries].collect{|q| "#{q[:negative] ? '-' : ''}(#{q[:query]})"}.join(' AND ')
- end
-
- query
- end
+ def flare_before
+ session[:page] ||= 1
- def filters
- session[:filters].collect do |filter|
- value = filter[:value]
- if value != "[* TO *]"
- value = "\"#{value}\""
- end
- "#{filter[:negative] ? '-' : ''}#{filter[:field]}:#{value}"
- end
- end
-
- def solr(request)
- logger.info "---\n#{request.inspect}\n---"
- SOLR.send(request)
+ session[:flare_context] ||= FlareContext.new(SOLR_CONFIG)
+
+ @flare = session[:flare_context]
end
-
end
Modified: lucene/solr/trunk/client/ruby/flare/app/controllers/browse_controller.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/app/controllers/browse_controller.rb?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/app/controllers/browse_controller.rb (original)
+++ lucene/solr/trunk/client/ruby/flare/app/controllers/browse_controller.rb Tue Mar 6 11:47:55 2007
@@ -2,8 +2,6 @@
# License:: Apache Version 2.0 (see http://www.apache.org/licenses/)
class BrowseController < ApplicationController
- before_filter :flare_before
-
# def self.flare(options={})
# define_method() do
# end
@@ -14,11 +12,6 @@
# end
def index
- # TODO Add paging and sorting
- @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
@@ -26,41 +19,31 @@
@start = (session[:page] - 1) * @results_per_page
- 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,
-# :queries => session[:saved].collect {|constraints| make_query(constraints)}
- },
- :highlighting => {:field_list => @text_fields})
- logger.info({:query => query, :filter_queries => filters}.inspect)
- @response = solr(request)
-
- #TODO: call response.field_facets(??) - maybe field_facets should be return a higher level?
+ @response = @flare.search(@start, @results_per_page)
end
def facet
- @facets = retrieve_field_facets(params[:field_name])
+ puts "---- facet: #{params[:field]}"
+ @facets = @flare.retrieve_field_facets(params[:field])
end
def auto_complete_for_search_query
# TODO instead of "text", default to the default search field configured in schema.xml
- @values = retrieve_field_facets("text", 5, params['search']['query'].downcase)
+ @values = @flare.retrieve_field_facets("text", 5, params['search']['query'].downcase)
render :partial => 'suggest'
end
+
def add_query
- session[:queries] << {:query => params[:search][:query]}
+ @flare.queries << {:query => params[:search][:query]}
session[:page] = 1
redirect_to :action => 'index'
end
def update_query
logger.debug "update_query: #{params.inspect}"
- session[:queries][params[:index].to_i][:query] = params[:value]
+ @flare.queries[params[:index].to_i][:query] = params[:value]
session[:page] = 1
render :update do |page|
page.redirect_to '/browse'
@@ -68,89 +51,79 @@
end
def invert_query
- q = session[:queries][params[:index].to_i]
+ q = @flare.queries[params[:index].to_i]
q[:negative] = !q[:negative]
session[:page] = 1
redirect_to :action => 'index'
end
def remove_query
- session[:queries].delete_at(params[:index].to_i)
+ @flare.queries.delete_at(params[:index].to_i)
session[:page] = 1
redirect_to :action => 'index'
end
def invert_filter
- f = session[:filters][params[:index].to_i]
+ f = @flare.filters[params[:index].to_i]
f[:negative] = !f[:negative]
session[:page] = 1
redirect_to :action => 'index'
end
def remove_filter
- session[:filters].delete_at(params[:index].to_i)
+ @flare.filters.delete_at(params[:index].to_i)
session[:page] = 1
redirect_to :action => 'index'
end
def add_filter
- session[:filters] << {:field => params[:field_name], :value => params[:value], :negative => (params[:negative] ? true : false)}
+ @flare.filters << {:field => params[:field], :value => params[:value], :negative => (params[:negative] ? true : false)}
session[:page] = 1
redirect_to :action => 'index'
end
- def clear
- session[:queries] = nil
- session[:filters] = nil
+ def add_saved_search
+ @flare.applied_facet_queries << {:name => params[:name], :negative => (params[:negative] ? true : false)}
+ redirect_to :action => 'index'
+ end
+
+ def remove_saved_constraint
+ @flare.applied_facet_queries.delete_at(params[:index].to_i)
session[:page] = 1
- flare_before
redirect_to :action => 'index'
end
- def save
- session[:saved] ||= {}
- session[:saved][params[:name]] = {:filters => session[:filters], :queries => session[:queries]}
+ def clear
+ @flare.clear
redirect_to :action => 'index'
end
- private
- def flare_before
- session[:queries] ||= []
- session[:filters] ||= []
- session[:page] ||= 1
- end
-
- def retrieve_field_facets(field, limit=-1, prefix=nil)
- req = Solr::Request::Standard.new(:query => query,
- :filter_queries => filters,
- :facets => {:fields => [field],
- :mincount => 1, :limit => limit, :prefix => prefix, :missing => true, :sort => :count
- },
- :rows => 0
- )
-
- results = SOLR.send(req)
-
- results.field_facets(field)
+ def show_saved
+ query = @flare.facet_queries[params[:name]]
+ @flare.applied_facet_queries << {:name => params[:name], :negative => (params[:negative] ? true : false)}
+ index
+ render :action => 'index'
end
- def make_query(constraints)
- queries = constraints[:queries]
- if queries.nil? || queries.empty?
- query = "*:*"
- else
- query = session[:queries].collect{|q| "#{q[:negative] ? '-' : ''}(#{q[:query]})"}.join(' AND ')
- end
-
- filter = constraints[:filters].collect do |filter|
- value = filter[:value]
- if value != "[* TO *]"
- value = "\"#{value}\""
- end
- "#{filter[:negative] ? '-' : ''}#{filter[:field]}:#{value}"
- end.join(" AND ")
-
- "#{query} AND #{filter}"
+ def save
+ @flare.facet_queries[params[:name]] = {:filters => @flare.filters.clone, :queries => @flare.queries.clone}
+ redirect_to :action => 'index'
end
+ def remove_saved_search
+ puts "---- BEFORE", @flare.to_s
+ @flare.facet_queries.delete(params[:name])
+ @flare.applied_facet_queries.delete_if {|f| params[:name] == f[:name]}
+ puts "---- AFTER", @flare.to_s
+ session[:page] = 1
+ redirect_to :action => 'index'
+ end
+
+ def invert_saved_constraint
+ f = @flare.applied_facet_queries[params[:index].to_i]
+ f[:negative] = !f[:negative]
+ session[:page] = 1
+ redirect_to :action => 'index'
+ end
+
end
Modified: lucene/solr/trunk/client/ruby/flare/app/controllers/simile_controller.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/app/controllers/simile_controller.rb?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/app/controllers/simile_controller.rb (original)
+++ lucene/solr/trunk/client/ruby/flare/app/controllers/simile_controller.rb Tue Mar 6 11:47:55 2007
@@ -13,13 +13,8 @@
class SimileController < ApplicationController
def exhibit
- # TODO this code was copied from BrowseController#index, and is here only as a quick and dirty prototype.
- # TODO figuring out where these calls cleanly belong is the key.
-
- req = Solr::Request::Standard.new :query => query, :filter_queries => filters
+ @data = @flare.search(0, 10)
- @data = SOLR.send(req)
-
# Exhibit seems to require a label attribute to be happy
@data.each {|d| d['label'] = d['title_text']}
@@ -30,15 +25,8 @@
end
def timeline
- # TODO this code was copied from BrowseController#index, and is here only as a quick and dirty prototype.
- # TODO figuring out where these calls cleanly belong is the key.
-
- @info = SOLR.send(Solr::Request::IndexInfo.new) # TODO move this call to only have it called when the index may have changed
- req = Solr::Request::Standard.new :query => query, :filter_queries => filters
-
- @data = SOLR.send(req)
-
-
+ @data = @flare.search(0, 10)
+
respond_to do |format|
format.html # renders timeline.rhtml
format.xml # renders timeline.rxml
Modified: lucene/solr/trunk/client/ruby/flare/app/views/browse/facet.rhtml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/app/views/browse/facet.rhtml?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/app/views/browse/facet.rhtml (original)
+++ lucene/solr/trunk/client/ruby/flare/app/views/browse/facet.rhtml Tue Mar 6 11:47:55 2007
@@ -6,7 +6,7 @@
<div>
Queries:
<div id="queries">
-<% session[:queries].each_with_index do |q,i| %>
+<% @flare.queries.each_with_index do |q,i| %>
<%=link_to q[:negative] ? "-" : '+', :action => :invert_query, :index => i%>
<span id="query_<%=i%>"><%=q[:query]%></span>
<%= in_place_editor "query_#{i}", :url=> url_for(:action=>"update_query", :index=>i) %>
@@ -18,7 +18,7 @@
<div>
Filters:
<div id="filters">
-<% session[:filters].each_with_index do |filter, i| %>
+<% @flare.filters.each_with_index do |filter, i| %>
<%=link_to filter[:negative] ? "-" : "+", :action => :invert_filter, :index => i%>
<%=filter[:field]%>:<%=filter[:value]%>
<%=link_to image_tag("x-close.gif"), :action => :remove_filter, :index => i %>
@@ -32,10 +32,11 @@
</div>
+<h1><%=params[:field]%></h1>
<% @facets.each do |f| %>
<% if f.name %>
- <%= link_to f.name, :action => 'add_filter', :field_name => params[:field_name], :value => f.name %> (<%=f.value%>)
+ <%= link_to f.name, :action => 'add_filter', :field => params[:field], :value => f.name %> (<%=f.value%>)
<% else %>
- <%= link_to '---- NO VALUE ----', :action => 'add_filter', :field_name => params[:field_name], :value => "[* TO *]", :negative => true %> (<%=f.value%>)
+ <%= link_to '---- NO VALUE ----', :action => 'add_filter', :field => params[:field], :value => "[* TO *]", :negative => true %> (<%=f.value%>)
<% end %>
<% end%>
Modified: lucene/solr/trunk/client/ruby/flare/app/views/browse/index.rhtml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/app/views/browse/index.rhtml?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/app/views/browse/index.rhtml (original)
+++ lucene/solr/trunk/client/ruby/flare/app/views/browse/index.rhtml Tue Mar 6 11:47:55 2007
@@ -7,18 +7,33 @@
</div>
<!-- <h2>browse facets</h2> -->
-<% @facet_fields.each do |field|%>
+<h4>
+ saved searches
+</h4>
+<ul>
+<% @flare.facet_queries.each do |name,value|
+ count = @response.data['facet_counts']['facet_queries'][value[:real_query]]
+%>
+<li>
+ <%= image_tag "pie_#{(count * 100.0 / @response.total_hits).ceil rescue 0}.png"%>
+ <%= link_to "#{name} (#{count})", {:action => 'add_saved_search', :name=>name}, {:title => value.inspect}%>
+ <%= link_to "*", {:action => 'show_saved', :name => name}, {:target => '_blank'}%>
+ <%=link_to image_tag("x-close.gif"), :action => :remove_saved_search, :name => name %>
+</li>
+<% end %>
+</ul>
+
+<% @flare.facet_fields.each do |field|%>
<h4>
-<%=h field%> <%=link_to "[browse]", :action => 'facet', :field_name => field%>
-<!-- <%=link_to field, :action => 'facet', :field_name => field%> -->
+<%=h field%> <%=link_to "[browse]", :action => 'facet', :field => field%>
+<!-- <%=link_to field, :action => 'facet', :field => field%> -->
</h4>
-
<ul>
<% @response.field_facets(field).each do |f| %>
<li>
<%= image_tag "pie_#{(f.value * 100.0 / @response.total_hits).ceil}.png"%>
- <%= link_to "#{f.name} (#{f.value})", :action => 'add_filter', :field_name=>field, :value=>f.name%>
+ <%= link_to "#{f.name} (#{f.value})", :action => 'add_filter', :field=>field, :value=>f.name%>
</li>
<% end %>
</ul>
@@ -32,9 +47,17 @@
</div>
<div>
+ <span class="varheader">Saved searches:</span>
+ <div id="queries">
+ <% @flare.applied_facet_queries.each_with_index do |q, i| %>
+ <%=link_to q[:negative] ? "-" : "+", :action => :invert_saved_constraint, :index => i%>
+ <%=q[:name]%>
+ <%=link_to image_tag("x-close.gif"), :action => :remove_saved_constraint, :index => i %><br/>
+ <% end %>
+ </div>
<span class="varheader">Queries:</span>
<div id="queries">
-<% session[:queries].each_with_index do |q,i| %>
+<% @flare.queries.each_with_index do |q,i| %>
<%=link_to q[:negative] ? "-" : '+', :action => :invert_query, :index => i%>
<span id="query_<%=i%>"><%=q[:query]%></span>
<%= in_place_editor "query_#{i}", :url=> url_for(:action=>"update_query", :index=>i, :script=>true) %>
@@ -46,7 +69,7 @@
<div>
<span class="varheader">Filters:</span>
<div id="filters">
-<% session[:filters].each_with_index do |filter, i| %>
+<% @flare.filters.each_with_index do |filter, i| %>
<%=link_to filter[:negative] ? "-" : "+", :action => :invert_filter, :index => i%>
<%=filter[:field]%>:<%=filter[:value]%>
<%=link_to image_tag("x-close.gif"), :action => :remove_filter, :index => i %><br/>
@@ -58,9 +81,14 @@
<%=link_to '[clear constraints]', :action => 'clear'%>
</div>
+<% form_tag(:action=>'save') do %>
+ <%= text_field_tag :name %>
+ <%=submit_tag "save"%>
+<% end %>
+
</div>
-<div class="resultsheader">Results <strong><%=@start + 1%>-<%=[@response.total_hits,@results_per_page + @start].min%></strong> of <strong><%=@response.total_hits%></strong></div>
+<div class="resultsheader">Results <strong><%=[@start + 1,@response.total_hits].min%>-<%=[@response.total_hits,@results_per_page + @start].min%></strong> of <strong><%=@response.total_hits%></strong></div>
<div id="results"><table cellpadding="10">
<% @response.each do |doc| %>
@@ -69,11 +97,5 @@
</table>
</div>
-<div class="resultsheader"><%=link_to_if session[:page] != 1, "<<", :page => session[:page] - 1%> Results <strong><%=@start + 1%>-<%=[@response.total_hits,@results_per_page + @start].min%></strong> of <strong><%=@response.total_hits%></strong><%=link_to_if session[:page] < (@response.total_hits.to_f / @results_per_page).ceil, ">>", :page => session[:page] + 1%></div>
-
-
-
-
-<!-- <h3>index info</h3><%=debug @info %>
+<div class="resultsheader"><%=link_to_if session[:page] != 1, "<<", :page => session[:page] - 1%> Results <strong><%=[@start + 1,@response.total_hits].min%>-<%=[@response.total_hits,@results_per_page + @start].min%></strong> of <strong><%=@response.total_hits%></strong><%=link_to_if session[:page] < (@response.total_hits.to_f / @results_per_page).ceil, ">>", :page => session[:page] + 1%></div>
-<h3>search/facet response header</h3><%=debug @response.data['responseHeader']%> -->
Modified: lucene/solr/trunk/client/ruby/flare/app/views/document/_document_delicious.rhtml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/app/views/document/_document_delicious.rhtml?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/app/views/document/_document_delicious.rhtml (original)
+++ lucene/solr/trunk/client/ruby/flare/app/views/document/_document_delicious.rhtml Tue Mar 6 11:47:55 2007
@@ -1,13 +1,13 @@
<tr valign="top">
<td>
- <%=image_tag "http://images.amazon.com/images/P/#{@doc[:asin_text]}.01.MZZZZZZZ" %>
+ <%=image_tag "http://images.amazon.com/images/P/#{doc['asin_text']}.01.MZZZZZZZ" %>
</td>
<td>
<table class="entry">
<tr>
- <td class="title" colspan="2"><%=link_to @doc['title_text'], "http://www.amazon.com/exec/obidos/ASIN/#{@doc[:asin_text]}"%></td>
+ <td class="title" colspan="2"><%=link_to doc['title_text'], "http://www.amazon.com/exec/obidos/ASIN/#{doc['asin_text']}"%></td>
</tr>
- <% @doc.each do |k,v|; highlighting = @response.highlighted(@doc['id'], k) %>
+ <% doc.each do |k,v|; highlighting = response.highlighted(doc['id'], k) %>
<tr><td class="field"><%=k%>:</td><td><%= highlighting ? "...#{highlighting}..." : (v.respond_to?('join') ? v.join(',') : v.to_s)%></td></tr>
<% end %>
</table>
Modified: lucene/solr/trunk/client/ruby/flare/app/views/document/_document_tang.rhtml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/app/views/document/_document_tang.rhtml?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/app/views/document/_document_tang.rhtml (original)
+++ lucene/solr/trunk/client/ruby/flare/app/views/document/_document_tang.rhtml Tue Mar 6 11:47:55 2007
@@ -1,27 +1,27 @@
<%
- body_zh_highlighted = @response.highlighted(@doc['id'], 'body_zh_text')
- body_en_highlighted = @response.highlighted(@doc['id'], 'body_en_text')
+ body_zh_highlighted = response.highlighted(doc['id'], 'body_zh_text')
+ body_en_highlighted = response.highlighted(doc['id'], 'body_en_text')
-%>
<tr valign="top">
<td>
<table class="entry">
<tr>
- <td class="title" colspan="2"><%=@doc['title_zh_text']%> (<%=@doc['title_en_text']%>)</td>
+ <td class="title" colspan="2"><%=doc['title_zh_text']%> (<%=doc['title_en_text']%>)</td>
</tr>
<tr>
- <td class="field">author:</td><td><%=@doc['author_zh_facet']%> (<%=@doc['author_en_facet']%>)</td>
+ <td class="field">author:</td><td><%=doc['author_zh_facet']%> (<%=doc['author_en_facet']%>)</td>
</tr>
<tr>
- <td class="field">type:</td><td><%=@doc['type_zh_facet']%> (<%=@doc['type_en_facet']%>)</td>
+ <td class="field">type:</td><td><%=doc['type_zh_facet']%> (<%=doc['type_en_facet']%>)</td>
</tr>
<tr>
<td class="field">body:</td>
<td>
<blockquote>
- <%= body_zh_highlighted ? "...#{body_zh_highlighted}..." : @doc['body_zh_text'] %>
+ <%= body_zh_highlighted ? "...#{body_zh_highlighted}..." : doc['body_zh_text'] %>
</blockquote>
<blockquote>
- <%= body_en_highlighted ? "...#{body_en_highlighted}..." : @doc['body_en_text'] %>
+ <%= body_en_highlighted ? "...#{body_en_highlighted}..." : doc['body_en_text'] %>
</blockquote>
</td>
</tr>
Modified: lucene/solr/trunk/client/ruby/flare/app/views/simile/exhibit.rhtml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/app/views/simile/exhibit.rhtml?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/app/views/simile/exhibit.rhtml (original)
+++ lucene/solr/trunk/client/ruby/flare/app/views/simile/exhibit.rhtml Tue Mar 6 11:47:55 2007
@@ -16,7 +16,7 @@
<div id="exhibit-view-panel"></div>
</td>
<td width="25%">
- <div id="exhibit-browse-panel" ex:facets=".subject_genre_facet, .subject_era_facet, .subject_topic_facet, .subject_geographic_facet, .year_facet"></div>
+ <div id="exhibit-browse-panel" ex:facets="<%= SOLR_CONFIG[:exhibit_facets] -%>"></div>
</td>
</tr>
</table>
Modified: lucene/solr/trunk/client/ruby/flare/app/views/simile/timeline.rhtml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/app/views/simile/timeline.rhtml?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/app/views/simile/timeline.rhtml (original)
+++ lucene/solr/trunk/client/ruby/flare/app/views/simile/timeline.rhtml Tue Mar 6 11:47:55 2007
@@ -11,7 +11,7 @@
eventSource: eventSource,
date: "Jun 28 2006 00:00:00 GMT",
width: "70%",
- intervalUnit: Timeline.DateTime.CENTURY,
+ intervalUnit: Timeline.DateTime.DECADE,
intervalPixels: 200
}),
Timeline.createBandInfo({
Modified: lucene/solr/trunk/client/ruby/flare/config/environment.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/config/environment.rb?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/config/environment.rb (original)
+++ lucene/solr/trunk/client/ruby/flare/config/environment.rb Tue Mar 6 11:47:55 2007
@@ -68,14 +68,16 @@
:delicious => {
# :image_url => Proc.new {|d| "http://images.amazon.com/images/P/#{d[:asin_text]}.01.MZZZZZZZ"},
- :timeline_dates => :published_year_facet
+ :timeline_dates => :published_year_facet,
+ :exhibit_facets => ".medium_facet, .country_facet, .signed_facet, .rating_facet, .language_facet, .genre_facet, .publisher_facet, .published_year_facet"
},
:tang => {
},
:marc => {
- :timeline_dates => :year_facet
+ :timeline_dates => :year_facet,
+ :exhibit_facets => ".subject_genre_facet, .subject_era_facet, .subject_topic_facet, .subject_geographic_facet, .year_facet"
},
# TODO: :uva could inherit :marc settings, only overriding the template for VIRGO links
@@ -86,5 +88,5 @@
SOLR_ENV = ENV["SOLR_ENV"] || "development"
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)
+SOLR_CONFIG[:solr_url] ||= "http://localhost:8983/solr"
+#SOLR = Solr::Connection.new(SOLR_CONFIG[:solr_url])
Modified: lucene/solr/trunk/client/ruby/flare/config/routes.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/config/routes.rb?view=diff&rev=515272&r1=515271&r2=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/config/routes.rb (original)
+++ lucene/solr/trunk/client/ruby/flare/config/routes.rb Tue Mar 6 11:47:55 2007
@@ -13,7 +13,9 @@
# -- just remember to delete public/index.html.
map.connect '', :controller => "browse"
- map.connect 'browse/facet/:field', :controller => "browse", :action => "facet"
+ map.connect 'browse/facet', :controller => "browse", :action => "facet"
+
+ map.connect 'saved/:name', :controller => 'browse', :action => 'show_saved'
# Allow downloading Web Service WSDL as a file with an extension
# instead of a file named 'wsdl'
Added: lucene/solr/trunk/client/ruby/flare/lib/flare_context.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/flare/lib/flare_context.rb?view=auto&rev=515272
==============================================================================
--- lucene/solr/trunk/client/ruby/flare/lib/flare_context.rb (added)
+++ lucene/solr/trunk/client/ruby/flare/lib/flare_context.rb Tue Mar 6 11:47:55 2007
@@ -0,0 +1,116 @@
+# 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.
+
+# TODO Add sorting
+class FlareContext
+ attr_accessor :queries, :filters, :facet_queries, :applied_facet_queries
+ attr_reader :facet_fields, :text_fields
+
+ def initialize(solr_config)
+ @connection = Solr::Connection.new(solr_config[:solr_url])
+
+ clear
+ @facet_queries = {} # name => {:queries => [], :filters => []}
+
+ puts "initialize\n-------","#{solr_config.inspect}"
+ @index_info = @connection.send(Solr::Request::IndexInfo.new)
+
+ @facet_fields = @index_info.field_names.find_all {|v| v =~ /_facet$/}
+ @text_fields = @index_info.field_names.find_all {|v| v =~ /_text$/}
+ end
+
+ def clear
+ puts "clear\n-------"
+ @queries = []
+ @filters = []
+ @applied_facet_queries = []
+
+ # this is cleared for development purposes - allowing flare to stay running but different Solr datasets swapping
+ @index_info = @connection.send(Solr::Request::IndexInfo.new)
+ @facet_fields = @index_info.field_names.find_all {|v| v =~ /_facet$/}
+ @text_fields = @index_info.field_names.find_all {|v| v =~ /_text$/}
+
+ # facet_queries not cleared as their lifetime is different than constraints
+ end
+
+ def search(start, max)
+ facet_queries = @facet_queries.collect do |k,v|
+ clauses = filter_queries(v[:filters])
+ clauses << build_boolean_query(v[:queries])
+ query = clauses.join(" AND ")
+ @facet_queries[k][:real_query] = query
+ query
+ end
+
+ qa = applied_facet_queries.collect {|map| q = @facet_queries[map[:name]][:real_query]; map[:negative] ? "-(#{q})" : q}
+ qa << build_boolean_query(@queries)
+ request = Solr::Request::Standard.new(:query => qa.join(" AND "),
+ :filter_queries => filter_queries(@filters),
+ :start => start,
+ :rows => max,
+ :facets => {
+ :fields => @facet_fields, :limit => 20 , :mincount => 1, :sort => :count,
+ :queries => facet_queries
+ },
+ :highlighting => {:field_list => @text_fields})
+
+ #TODO: call response.field_facets(??) - maybe field_facets should be return a higher level?
+# logger.info({:query => query, :filter_queries => filters}.inspect)
+ @connection.send(request)
+ end
+
+ def retrieve_field_facets(field, limit=-1, prefix=nil)
+ req = Solr::Request::Standard.new(:query => build_boolean_query(@queries),
+ :filter_queries => filter_queries(@filters),
+ :facets => {:fields => [field],
+ :mincount => 1, :limit => limit, :prefix => prefix, :missing => true, :sort => :count
+ },
+ :rows => 0
+ )
+
+ results = @connection.send(req)
+
+ results.field_facets(field)
+ end
+
+ def to_s
+ <<-TO_S
+ ------
+ Applied facet queries: #{applied_facet_queries.inspect}
+ Queries: #{queries.inspect}
+ Filters: #{filters.inspect}
+ Facet queries: #{facet_queries.inspect}
+ ------
+ TO_S
+ end
+
+ private
+ def build_boolean_query(queries)
+ if queries.nil? || queries.empty?
+ query = "*:*"
+ else
+ query = queries.collect{|q| "#{q[:negative] ? '-' : ''}(#{q[:query]})"}.join(' AND ')
+ end
+
+ query
+ end
+
+ def filter_queries(filters)
+ filters.collect do |filter|
+ value = filter[:value]
+ if value != "[* TO *]"
+ value = "\"#{value}\""
+ end
+ "#{filter[:negative] ? '-' : ''}#{filter[:field]}:#{value}"
+ end
+ end
+end
Propchange: lucene/solr/trunk/client/ruby/flare/lib/flare_context.rb
------------------------------------------------------------------------------
svn:executable = *