Searchengine gesucht

hallo an alle,

ich bin auf der Suche nach einem Rails-Plugin, das mir folgende
Möglichkeiten bietet:

  1. Suche in der Datenbank
  2. Suche im Filesystem
  3. Bildung eines Indexes aus beiden Suchläufen
    => somit Ermöglichung einer Volltextsuche über alle Inhalte

Ich bin da auf rDig gestoßen. Könnt Ihr das empfehlen oder alternativ
eine andere Engine empfehlen? Sphinx oder Ferret scheinen meines
Erachtens nach da auszuscheiden, oder?

Laufen solls ab Rails 2.0.2 unter Linux.

Danke im voraus
Torsten

Hi!

On Tue, Mar 18, 2008 at 04:53:21PM +0100, Torsten F. wrote:

Ich bin da auf rDig gestoßen. Könnt Ihr das empfehlen oder alternativ
eine andere Engine empfehlen? Sphinx oder Ferret scheinen meines
Erachtens nach da auszuscheiden, oder?

Sphinx ist meines Wissens eher datenbankgebunden, wird also schwierig
mit der Suche im Dateisystem.

RDig nimmt intern Ferret und ist prima fürs Dateisystem- oder
Web-Crawling. Ich würde wohl acts_as_ferret für die Suche in der DB
nehmen, und zusätzlich RDig für die Sachen aus dem Dateisystem, wobei
der Trick ist, die beiden miteinander so zu integrieren, dass ein
gemeinsamer Index entsteht.

Ich habe sowas ähnliches neulich schonmal gemacht, allerdings ging es da
nicht ums Dateisystem sondern um statische Inhalte im Web, die mit
durchsucht werden sollten. Daher gibt’s im aktuellen trunk von aaf also
durchaus experimentellen, aber funktionierenden support für die
Einbindung von RDig als Crawler.

Da ich dieselbe Funktionalität demnächst in einem anderen Projekt wieder
brauche, sind die Chancen gut dass der Code sich zeitnah stabilisieren
wird :wink:

Grüße,Jens


Jens Krämer
Finkenlust 14, 06449 Aschersleben, Germany
VAT Id DE251962952
http://www.jkraemer.net/ - Blog
http://www.omdb.org/ - The new free film database

On Wed, 19 Mar 2008 09:48:00 +0100, “Jens K.” [email protected]
said:

  1. Bildung eines Indexes aus beiden Suchläufen
    => somit Ermöglichung einer Volltextsuche über alle Inhalte

Ich bin da auf rDig gestoßen. Könnt Ihr das empfehlen oder alternativ
eine andere Engine empfehlen? Sphinx oder Ferret scheinen meines
Erachtens nach da auszuscheiden, oder?

Sphinx ist meines Wissens eher datenbankgebunden, wird also schwierig
mit der Suche im Dateisystem.

dachte ich mir

RDig nimmt intern Ferret und ist prima fürs Dateisystem- oder
Web-Crawling. Ich würde wohl acts_as_ferret für die Suche in der DB
nehmen, und zusätzlich RDig für die Sachen aus dem Dateisystem, wobei
der Trick ist, die beiden miteinander so zu integrieren, dass ein
gemeinsamer Index entsteht.

ich glaube, einen entsprechenden Abschnitt in der
Beispielkonfigurationsdatei gesehen zu haben - jedoch:

beware, mixing file and http crawling is not possible and might result

in unpredictable results.

weiter unten im Beispiel steht dann aber:

create a new index on each run. Will append to the index if false. Use

when building a single index from multiple runs, e.g. one across a

website

and the other a tree in a local file system

config.index.create = true

ich gehe also davon aus, 2 Konfigurationen benutzen zu müssen, deren
Läufe dann via Parameter config.index.create = false an den bereits
bestehenden Index angehängt werden. Das ist sicher nicht das Hohe C der
Früchtekunst, kommt aber an meinen Wunsch schon ziemlich nahe heran :wink:
wenns denn so funktioniert. Und die beiden Aufrufe per Batch laufen zu
lassen, ist ja eh kein Problem nicht.

Ich habe sowas ähnliches neulich schonmal gemacht, allerdings ging es da
nicht ums Dateisystem sondern um statische Inhalte im Web, die mit

das unterscheidet sich ja in dem Fall nur im Präfix: http:// statt
file:// - und file:// wird ja
unterstützt.

durchsucht werden sollten. Daher gibt’s im aktuellen trunk von aaf also
durchaus experimentellen, aber funktionierenden support für die
Einbindung von RDig als Crawler.
Da ich dieselbe Funktionalität demnächst in einem anderen Projekt wieder
brauche, sind die Chancen gut dass der Code sich zeitnah stabilisieren
wird :wink:

alles in allem werde ich es also mal mit rDig/aaf probieren.

Danke erstmal.
Torsten

On Wed, Mar 19, 2008 at 12:35:19PM +0100, Torsten F. wrote:
[…]

ich gehe also davon aus, 2 Konfigurationen benutzen zu müssen, deren
Läufe dann via Parameter config.index.create = false an den bereits
bestehenden Index angehängt werden. Das ist sicher nicht das Hohe C der
Früchtekunst, kommt aber an meinen Wunsch schon ziemlich nahe heran :wink:
wenns denn so funktioniert. Und die beiden Aufrufe per Batch laufen zu
lassen, ist ja eh kein Problem nicht.

naja, ich meinte eigentlich eher, rdig nur für den statischen Teil (also
das Dateisystem) zu nehmen, und acts_as_ferret das Indizieren der
Inhalte in der Datenbank zu überlassen.

Aber wenn das crawlen der DB-Inhalte per http aus Anwendungssicht
akzeptabel ist (du verlierst damit einiges an features, etwa gezielte
Queries nach Attributen die in strukturierter Form in der DB stehen),
fährst du mit einer reinen RDig-basierten Lösung wie von dir oben
skizziert vom Implementierungsaufwand her womöglich besser. Wenn deine
Inhalte im Dateisystem auch per http erreichbar sind (wozu sollte man
sie sonst finden können?), könntest du sogar die gesamte site in einem
Rutsch per http indizieren.

Für Detailfragen zu Ferret gibt’s auch eine (englischsprachige)
Mailingliste: [email protected]

Grüße,Jens


Jens Krämer
http://www.jkraemer.net/ - Blog
http://www.omdb.org/ - The new free film database

Am 18.03.2008 um 16:53 schrieb Torsten F.:

Ich bin da auf rDig gestoßen. Könnt Ihr das empfehlen oder alternativ
eine andere Engine empfehlen? Sphinx oder Ferret scheinen meines
Erachtens nach da auszuscheiden, oder?

Ganz aktuelle, ein Performance-Test:
http://blog.evanweaver.com/articles/2008/03/17/rails-search-benchmarks/

ciao, to


Thomas R. “TomK32” Koll <> http://tomk32.de <> http://ananasblau.de
just a geek trying to change the world
http://workingwithrails.com/person/9367-thomas-r-koll
Skype: TomK32

Am 18.03.08 schrieb Torsten F. [email protected]:

Ich bin da auf rDig gestoßen. Könnt Ihr das empfehlen oder alternativ
eine andere Engine empfehlen? Sphinx oder Ferret scheinen meines
Erachtens nach da auszuscheiden, oder?

es kann nur einen geben:
hyperestraier http://hyperestraier.sourceforge.net/

index läßt sich u.a. via http befüllen + abfragen, gute attribut
funktionen, schnell und ruby api gibts wohl auch.

grüße, robert

On 19:27 Mi 19 Mär, Jens K. wrote:

das Dateisystem) zu nehmen, und acts_as_ferret das Indizieren der
Inhalte in der Datenbank zu überlassen.

Aber wenn das crawlen der DB-Inhalte per http aus Anwendungssicht
akzeptabel ist (du verlierst damit einiges an features, etwa gezielte
Queries nach Attributen die in strukturierter Form in der DB stehen),
fährst du mit einer reinen RDig-basierten Lösung wie von dir oben
skizziert vom Implementierungsaufwand her womöglich besser. Wenn deine
Inhalte im Dateisystem auch per http erreichbar sind (wozu sollte man
sie sonst finden können?), könntest du sogar die gesamte site in einem
Rutsch per http indizieren.

und genau das, habe ich festellen müssen, ist dramatisch einfach zu
implementieren - einfach wie in der Doku die Root-URL angeben und den
Indexlauf starten: fertig zur Benutzung.

Ich habe ein paar Suchtests via script/console gemacht und bin bis jetzt
ganz zufrieden. Für unsere “Clubseite” ist das mehr als ausrechend.
Außerdem muss ich auch an den armen P3/500 mit 256MB denken :wink:

Was mir aber viel mehr Kopfzerbrechen bereitet ist folgendes:

script/console

Loading development environment (Rails 2.0.2)

search_results = RDig.searcher.search(“nockalm”)
=> <hier genau die Ergebnisse, die ich erwartet habe>

search_results.class
=> Hash

search_results[:list].class
=> Array (an jedem Index steht wieder ein Hash: das wird einfach dachte
ich)

Gib mir einfach die URL der Treffer aus:

search_results[:list].each { | x | print x[:url], “\n” }

Es gibt 2 Ergebnisse (juhui!):
http://localhost:3000/tour/show/1
http://localhost:3000/tour

aber danach kommt nochmal der gesamte Inhalt:
=> [{:url=>“http://localhost:3000/tour/show/1”,
:score=>0.546059131622314, etc. pp… - what??

Ich stehe vollkommen auf dem Schlauch, das geht ja soweit, das ein

search_results[:list].each { | x | x.class }
nicht etwa den Namen des Objektes ausspuckt, sondern ebenfalls dessen
Inhalt. Schreibe ich aber:

search_results[:list][0].class
kommt sehr wohl das erwartete Ergebnis: Hash.

Und um letzte Zweifel zu zerstreuen:

search_results[:list][0][:url] ergibt:
=> “http://localhost:3000/tour/show/1

ratlos - was mache ich falsch? Ich büffle jetzt schon 3 Stunden
darüber,kann aber meinen Fehler nicht finden…

Für Detailfragen zu Ferret gibt’s auch eine (englischsprachige)
Mailingliste: [email protected]

Im Moment bin ich dankbar dafür, wenn die Basisfunktionalität geht.
Aber danke, wenns Not tut, werde ich das gerne nutzen.

torsten

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs