2010-10-29 4 views
7

Dies ist eher eine theoretische Frage als Praxis. Ich arbeite an einem Projekt, das ein ziemlich einfacher Katalog von Links ist. Das gesamte Modell ist dem Dmoz- oder Yahoo-Katalog ähnlich, mit der Ausnahme, dass jeder Eintrag bestimmte zusätzliche Attribute aufweist.Searching Techniques Recommendations

Ich habe hierarchische Taxonomie Arbeiten an allen Einträgen mit Viele-zu-viele-Beziehung, alle Einträge sind jetzt in diese Kategorien sortiert, und alles scheint gut zu funktionieren. Was nützt ein Katalog, wenn es keine Suchoption gibt?

Hier ist ein bisschen mehr Details über meine Modelle: Jeder Eintrag hat einen Titel, eine Beschreibung, URL und verschiedene soziale Profile: YouTube, Twitter, Flickr und ein paar andere. Jeder Eintrag könnte mit einem Logo und einem versteckten Feld für Tags versehen sein. Der Titel und die Beschreibung werden in drei verschiedenen Sprachen gespeichert. Also im Grunde möchte ich die Suchergebnisse gerne sein:

  1. Relevante (einschließlich Taxonomie)
  2. Möglicherweise diejenigen mit Logos
  3. Möglicherweise diejenigen mit 100% ausgefüllte Profile

Ich habe versuchte Sphinx und arbeitet derzeit mit Lucene, aber es scheint, dass ich die Suche in der Theorie nicht richtig finde. Ich hoffe, es macht Sinn, dass gefüllte Einträge höher erscheinen als die anderen, aber ich kann die Punkte nicht wirklich herausfinden. Ich möchte nicht, dass irrelevante Einträge oben erscheinen, wenn in der gesamten Beschreibung nur ein Wort übereinstimmt, da Titel relevanter sind.

Also meine Frage ist - gibt es irgendwelche Bücher, Techniken oder auch andere Suchmaschinen (wenn Sphinx und Lucene sind nicht gut genug) die Sie für diese Angelegenheit empfehlen würden? Ich möchte nicht nur die Suchergebnisse und deren Ranking kontrollieren, sondern auch meinen Besuchern korrekte und relevante Informationen geben.

Links zu coolen Artikeln sind auch willkommen!

Und Nein, ich versuche nicht, Google wieder aufbauen :)

Thanks :)

+1

P.S. Ich bin bereit, ein Kopfgeld für die beste Antwort zu geben. – kovshenin

Antwort

4

Ich bin mir ziemlich sicher, dass Lucene genug ist. Wir haben ähnliche Aufgaben gelöst und es gut gemacht. Hier sind einige Hinweise, die ich Ihnen vorschlagen kann, auf mein Projekt bei Lucene.Net zurückzublicken.

Taxonomie:

  • Kategorie hat als Integer-Schlüssel in db dargestellt, so dass jedes Dokument mehrere Instanzen Feld ‚Kategorie‘ des Typs Zahl hat. Zum Beispiel Dokument: [1,2,5,10, 'Wheel'] - bedeutet, dass das Rad zu jeder Kategorie gehört.

Nicht durchsuchbare Felder (Logos, soziales Profil):

  • Natürlich können Sie nicht durchsuchbar Werte in lucene nicht-indizierten Feldern speichern können. Aber wir haben alle produktbezogenen Informationen in der DB gespeichert, um den Lucene-Index nicht neu zu erstellen. So besitzt Lucene nur die ID des Produkts und indizierte, aber gespeicherte Werte für Schlüsselfelder.

Drei Sprachen und mehrere Felder:

  • Wir haben nur 2 Sprachen. So können verschiedene Produkttitel im selben Lucene-Dokument gespeichert werden und beziehen sich auf die einzelne ID des Produkts (wie ich schreibe, bevor ID auf DB verweist). Auf diese Weise können Sie das Produkt suchen, auch wenn die Benutzeranforderung einen Sprachenmix verwendet.
  • Offensichtlich Titel, Tags und Beschreibung haben unterschiedliche Gewicht für Suchergebnis. Lucene behandelt es, indem es Feldgewicht zuweist.
5

Excellent Buch: Lucene in Action (2nd edition)

Als wir mit Lucene begonnen hatten wir die erste Ausgabe, es dauert wirklich durch alles, was Sie Schritt für Schritt benötigen. Sehr empfehlenswert. Die 2. Ausgabe wird für die neueste und beste Version (3.x.x) aktualisiert. Der Algorithmus Tf-Idf funktioniert sehr gut bei (größeren) Texten, aber wenn Sie eine rekordähnliche Struktur haben, kann es fehlschlagen: Die Dokumente mit einigen Begriffen werden als "relevanter" angesehen als die Begriffe mit vielen Begriffen. Mit Lucene werden Sie es zur Arbeit bringen, aber Sie müssen sich die Hände schmutzig machen.

Was Sie im Grunde tun müssen, ist boost your title field, so wird es relevanter. Sie können auch change the scoring mechanism zuweisen, um höhere Bewertungen für Dokumente mit mehr Informationen zuzuordnen.

Viel Spaß. Wenn Sie es nicht herausfinden können, gibt es ausgezeichnete Unterstützung auf dem Lucene mailinglist.

1

Lucene oder Solr würde die Aufgabe erledigen. Solr ist auf Lucene gebaut, see here for more info

würde ich mit solr gehen. Download + Einrichten ist einfach und schnell. Beginne mit dem Tutorial und meinem link collection. Relevanz sollte mit solr gut sein und ist leicht einstellbar.

Schauen Sie in Dewfy und Matthijs Bierman für einige gute Punkte zu beantworten.

Wählen Sie dann den Dismax-Abfrage-Handler und Sie können Dokumente mit bestimmten Eigenschaften bevorzugen.

z. Für den Prozentsatz eines vollständigen Profils definieren Sie ein separates Feld 'profile_completness', dann können Sie profile_compleness zu bf (boostfunction) des dismax-Handlers hinzufügen: Je vollständiger das Profil ist, desto mehr Dokumente werden verstärkt.

Ich erwähnte zuvor, dass Sie einfach die Relevanz tunen können: z. Sie können bf auf etw einstellen. wie: bf=title^10 tags^5 profile_completeness^1

"Möglicherweise mit Logos" kann über Boost-Abfragen gelöst werden: bq=logo:[* TO *]^1. Wobei logo:[* TO *] bedeutet "nur Dokumente, die das Feldlogo enthalten"

Um einen tief verschachtelten Kategoriebaum anzuzeigen, müssen Sie diesen Baum im Speicher erstellen und solr mit einem speziellen Import füttern. Wir haben eine funktionierende App dafür. Sie können our approach

verwenden Wenn Sie weitere Unterstützung benötigen, zögern Sie nicht, zu kommentieren.

2

Ich werde versuchen, die feinen Antworten von Matthijs, Dewfy und Karussell hinzuzufügen. Im Grunde versuchen Sie, Ihre Suchrelevanz zu verbessern. Ich schlage vor, Sie lesen Grant Ingersoll Debugging Search Application Relevance Issues und seine Optimizing Findability in Lucene and Solr, sowie seine Practical Relevance slides.

Für verschiedene Sprachen und für die Facettierung empfehle ich die Verwendung Solr. Es ist eine Suchmaschine mit Lucene, die einfach zu bedienen ist. Es kann mehrere Sprachen unterstützen, indem für jede Sprache ein anderer Solr Core verwendet wird.

Verwandte Themen