You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Simon Peter Nicholls <si...@mintsource.org> on 2006/09/17 17:29:14 UTC

Re: acts_as_solr

I had a play around with acts_as_solr today (thanks Yonik for the  
pointer). Had to fiddle around for a while to set up the schema.xml,  
(I'm totally new to Solr), but it worked well.

Well, I'm far from RoR savvy (new to Ruby/Rails also), but concerning  
the commit question, probably using an around_filter to extend the  
transaction scope would be best. That way, migrations, script/ 
console, & other ways to directly use model will still work using  
auto-commit. I'll have a stab to keep the ball rolling.

Add filter in from from plugin:

ActionController::Base.around_filter SolrFilter.new

With something like this pseudocode:

class SolrFilter
	def before
		disable solr commit for request
	end

	def after
		solr commit
	end
end

(and check if commit needed within save callback of course)

Anyway, acts_as_solr is looking good, thanks!

Simon

 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

> I think Ruby is very fertile ground for Solr to pick up
> users/developers right now.
>

I fully agree.  Ferret is coming along very nicely as well, which is  
wonderful for pure Rubyists that don't need the additional  
dependency, skill set to manage, and different environment that Solr  
would require.  But Solr really shines for all its caching and index  
management, so I'm sure there will be many RoR folks that will  
embrace Solr.


> Getting into some little details, it looks like a commit (which
> actualy does an optimize) is done on every .save, right?
>

That's true.  I'm not sure how one would avoid doing a commit for  
a .save.  There isn't, as far as I know, broader granularity for  
database operations.  An optimize wouldn't be necessary, but  
certainly swapping over the searcher would be desired after a save.


> I also notice that the commit is asynchronous... so one could do a
> save, then do an immediate search and not see the changes yet, right?
>

That is true.  But holding up a save for a new IndexSearcher would be  
a big hit, at least in my application that currently takes 30+  
seconds of warming up before a new searcher is ready.


> I don't know anything about RoR and ActiveRecord, but hopefully there
> is some way to avoid a commit on every operation.
>

It could certainly be made more manual such that a developer would  
need to code in when a commit happens.  I'm not currently sure what  
other options there would be for it to be automatic but not done for  
every .save.  Within a RoR application, one could code in a <commit/>  
a controller after_filter such that it would occur at the end of an  
HTTP request by the browser.  Any RoR savvy folks have suggestions on  
this?

	Erik

Re: acts_as_solr

Posted by Simon Peter Nicholls <si...@mintsource.org>.
Additionally, we should mock out for testing reasons, e.g. in file  
test/mocks/test/acts_as_solr.rb:

require "#{File.dirname(__FILE__)}/../../../vendor/plugins/ 
acts_as_solr/lib/acts_as_solr.rb"

module SolrMixin #:nodoc:

	module Acts #:nodoc:

		module ARSolr #:nodoc:

			module InstanceMethods #:nodoc:

				def solr_save #:nodoc:

				end
				
				def solr_destroy #:nodoc:

				end
				
			end
			
		end#module ARSolr

	end#module Acts

end#module SolrMixin

ClassMethod find_by_solr is the tricky case, but could be handled by  
various means, from specifying mock return collections, through using  
Procs, to using Solr (or even Ferret) as a local test engine if query  
*absolutely* needs testing. Solr interface seems simple enough that  
mocking return values is fine though.

Any thoughts?

Simon

On 17 Sep 2006, at 17:29, Simon Peter Nicholls wrote:

> I had a play around with acts_as_solr today (thanks Yonik for the  
> pointer). Had to fiddle around for a while to set up the  
> schema.xml, (I'm totally new to Solr), but it worked well.
>
> Well, I'm far from RoR savvy (new to Ruby/Rails also), but  
> concerning the commit question, probably using an around_filter to  
> extend the transaction scope would be best. That way, migrations,  
> script/console, & other ways to directly use model will still work  
> using auto-commit. I'll have a stab to keep the ball rolling.
>
> Add filter in from from plugin:
>
> ActionController::Base.around_filter SolrFilter.new
>
> With something like this pseudocode:
>
> class SolrFilter
> 	def before
> 		disable solr commit for request
> 	end
>
> 	def after
> 		solr commit
> 	end
> end
>
> (and check if commit needed within save callback of course)
>
> Anyway, acts_as_solr is looking good, thanks!
>
> Simon
>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>
>> I think Ruby is very fertile ground for Solr to pick up
>> users/developers right now.
>>
>
> I fully agree.  Ferret is coming along very nicely as well, which  
> is wonderful for pure Rubyists that don't need the additional  
> dependency, skill set to manage, and different environment that  
> Solr would require.  But Solr really shines for all its caching and  
> index management, so I'm sure there will be many RoR folks that  
> will embrace Solr.
>
>
>> Getting into some little details, it looks like a commit (which
>> actualy does an optimize) is done on every .save, right?
>>
>
> That's true.  I'm not sure how one would avoid doing a commit for  
> a .save.  There isn't, as far as I know, broader granularity for  
> database operations.  An optimize wouldn't be necessary, but  
> certainly swapping over the searcher would be desired after a save.
>
>
>> I also notice that the commit is asynchronous... so one could do a
>> save, then do an immediate search and not see the changes yet, right?
>>
>
> That is true.  But holding up a save for a new IndexSearcher would  
> be a big hit, at least in my application that currently takes 30+  
> seconds of warming up before a new searcher is ready.
>
>
>> I don't know anything about RoR and ActiveRecord, but hopefully there
>> is some way to avoid a commit on every operation.
>>
>
> It could certainly be made more manual such that a developer would  
> need to code in when a commit happens.  I'm not currently sure what  
> other options there would be for it to be automatic but not done  
> for every .save.  Within a RoR application, one could code in a  
> <commit/> a controller after_filter such that it would occur at the  
> end of an HTTP request by the browser.  Any RoR savvy folks have  
> suggestions on this?
>
> 	Erik