2009-07-20 5 views
0

Ich baue eine Website für das Lernen von Pruptions und ich bin auf lucene.net als Volltext-Indexer für meine Inhalte, aber ich habe ein paar Fragen.Newbie zu Lucene.net, am besten für komplexe Abfragen?

Sagen wir, ich habe eine Hierarchie (n Ebenen) von Kategorien und Artikeln, die einer Kategorie zugeordnet sind (1 Katze -> n Artikel). Mit einem einfachen RDB wäre es sehr einfach, nach einem Artikel unter einer Kategorie oder einer seiner Unterkategorien zu suchen. Aber ich kämpfe um vorstellen, wie ich diese Art von Abfrage mit Lucene bauen würde. Optionen Ich denke, dass könnte funktionieren:

Überlegen, dass ich idexing "Titel, Text, Kategorie" für jeden Artikel, eine Option wäre, zuerst eine Liste mit den IDs jeder Unterkategorie aus der DB und dann suchen in Lucene mit dieser Liste.

Andere Option wäre, die gesamte Kategorie "Pfad" des Artikels in einem Feld in Lucene indizieren. So etwas wie "Titel", "Text", "catparent1, catparent2, catparent3, Kategorie"?

Was ist der beste Ansatz bei dieser Art der Abfrage mit komplexen relationalen Filtern? (Nicht nur Textsuche)

Antwort

4

Fügen Sie den Kategorie-Pfad als indiziertes Feld, und eine Phrasensuche verwenden, um es zu suchen:

ID  Title    Categories 

"MyDoc1", "Hello world!", "/programming/beginner/samples" 
"MyDoc2", "Prove that P=NP", "/programming/advanced/samples" 

Jetzt können Sie die Kategorien abfragen entweder hierarchisch eine Phrase Suche mit:

"/programming/beginner" 

oder nicht-hierarchisch eine Wortsuche mit:

"samples" 

ich benutze dies traf hod zum indizieren von Dateien mit ihren Pfadnamen - Sie können für "dirname" oder "parent/child" oder abfragen und alles funktioniert gut.

Sie können steuern, ob Ihre Suche an der Wurzel beginnt, indem Sie den führenden Schrägstrich ein- oder ausschließen.

In Bezug auf "komplexe relationale Filter" können Sie diese Kategoriesuchen dann mit anderen Suchen und Filtern mit booleschen Abfragen kombinieren.

Verwandte Themen