Frage

Am Aufbau einer "Book search" API Lucene. Ich muss Index Buch Name, Autor und Buchkategoriefelder in Lucene Index.

Ein einzelnes Buch kann unter mehreren verschiedenen Buchkategorien fallen ... zum Beispiel:

BookName1 --fiction, Humor, Philosophie. BookName1 --fiction, Wissenschaft. BookName1 --humour, Geschäft. BookName4-Humor und so weiter .....

Der Benutzer sollte alle Bücher unter einer bestimmten Kategorie suchen können sagen: „homour“.

diese Situation gegeben, wie kann ich Index über Felder und die Abfrage in lucene bauen?

War es hilfreich?

Lösung

Sie können ein Feld haben für ein Lucene Dokument mehrfach vorkommen. Erstellen Sie das Dokument, fügen Sie die Werte für den Namen und Autor, dann das gleiche für jede Kategorie

  • Erstellen neues lucene Dokument
  • addieren Namensfeld und Wert
  • hinzufügen Autor Feld und Wert
  • für jede Kategorie:
    • hinzufügen Kategoriefeld und Wert
  • hinzufügen Dokument Index

Wenn Sie den Index für eine Kategorie suchen, wird es alle Dokumente, die eine Kategorie Feld mit dem Wert haben, nachdem Sie sind. Die Kategorie sollte ein ‚Keyword‘ Feld sein.

ich es in Englisch geschrieben habe, weil der spezifische Code etwas anders pro lucene Version.

Andere Tipps

Sie können ein einfaches „Kategorie“ Feld erstellen, in dem Sie alle categrories für ein Buch durch Leerzeichen getrennte Liste.

Dann können Sie suchen so etwas wie:

stock market AND category:(+"business")

Oder wenn Sie in mehr als einer Kategorie suchen,

stock market AND category:(+"business" +"philosophy")

Ich würde verwenden Solr statt - es ist auf Lucene gebaut und von der ASF verwaltet, ist aber viel, viel einfacher zu bedienen als Lucene, vor allem für Einsteiger.

Wenn Angebote ziemlich alle Fern Merkmale von Lucene (sicherlich alles, was Sie für das Projekt benötigen Sie beschreiben), plus extra Dinge wie Snapshot, Replikation, Schemata, ...

In Solr, würden Sie einfach definieren Sie die Felder, wie dies in schema.xml indizieren etwas wollen:

<field name="book_id" type="string" indexed="true" stored="true" required="true" multiValued='false'/>
<field name="book_name" type="text" indexed="true" stored="true" required="true" multiValued='false' />
<field name="book_authors" type="text" indexed="true" stored="true" required="true" multiValued='true' />
<field name="book_categories" type="textTight" indexed="true" stored="true" required="true" multiValued='true' />

Beachten Sie, dass das multiValued='true' Attribut können Sie effektiv ein Array oder eine Liste in diesem Feld übergeben, die schön von Solr aufgeteilt und indiziert wird.

Wenn Sie diese haben, starten Sie Solr und Sie können Abfragen wie „book_authors:Hemingway“ fragen oder „book_categories:Romance book_categories:Mills“.

Es gibt mehrere Abfrage-Handler vor-geschrieben und konfiguriert für Sie Dinge wie Parse komplexe Abfragen zu tun (Fuzzy-Matches, Boolesche Operationen, scoring Boosts, ...) und als Solr API über HTTP ausgesetzt ist, all diese gewickelt durch eine Reihe von Client-Bibliotheken, so brauchen Sie nicht die Low-Level-Details von Crafting-Abfragen selbst zu behandeln.

Es gibt viele großen Dokumentation auf ihrer Website für den Einstieg.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top