acts_as_solr I like

Im Rahmen eines neuen Projekts bin ich zur Zeit am Evaluieren einer Suche auf Apache-Solr Basis um eine datenbankbasierte Suche zu vermeiden.
Ich bin ja ein Fan von Lucene. Solr ist eine Art „Server für Lucene“ mit dem man XML sprechen kann.I m Hintergrund wird dann Lucene zum Suchen über einen Index verwendet. Update, select, delete etc. geht alles schön einfach via XML. Es gibt auch ein
JSON API.
Die Installation dauert ca. 5 Minuten. Die Solr-Distribution bringt einen eigenen AppServer (Jetty) mit und ist sogleich startbereit.
Ich habe Solr aber in meinen Tomcat (in dem auch meine Applikation läuft) mitlaufen lassen. slor.war ins /webapps und gut ist.

Mehr zur Solrintegration in die WebApp später.

Das eigentlich interessante ist aber, das ich beim stöbern im Netz auf eine Ruby on Rails Plugin gestoßen bin, das es mir erlaubt meine alte datenbankbasierte Suche in meinem domain_managr innerhalb von 10 Minuten gegen eine Solr-Suche auszutauschen.

acts_as_solr
.

In kurzen Worten:

Vorraussetzung ist nicht einmal eine vorsinstallierte Solr-Instanz – das Plugin bringt eine eigene mit.
rake solr:start startet den eingebauten Solrserver.

Ich benutze aber weiterhin meinen bereits bestehenden Server – is ja schon da :)

nach der Installation des Plugins mittels:

script/plugin install svn://svn.railsfreaks.com/projects/acts_as_solr/trunk

reicht ein zartes: acts_as_solr im Model:

class Account < ActiveRecord::Base acts_as_solr has_many:invoices end
und die Klasse ist nun für solr bekannt.

Die Änderungen an der Suche:

def search
@query = params[:query] # SQL search
# @accounts = Account.find(:all , :conditions => [ "domain like ? ", '%'+@query+'%'])
# Solr search
res = Account.find_by_solr(@query)
@accounts = res. records()
render_without_layout
end

Nach dieser Änderung benutzt die Suche nun meinen Solr-Server und ich kann dessen ganze "Macht" nutzen.

acts_as_solr I like

... to be continued ...

One Response to “acts_as_solr I like”

  1. Rafal
    8/2/2007 at 8:33 pm #

    Hi Stephan, das nutzen wir schon länger bei uns. Schöne Grüße Rafal

Leave a Reply