Ich entwickle eine Suchkomponente einer Webanwendung mit Lucene. Ich möchte die Benutzerabfragen in einem Index speichern und sie dazu verwenden, alternative Abfragen an Benutzer vorzuschlagen und Abfragestatistiken (meist verwendete Abfragen, Abfragen mit der höchsten Punktzahl usw.) beizubehalten.
Um diese Daten für alternative Suchanfragen zu verwenden, würde ich die Abfragen analysieren, um zu sehen, welche Begriffe am häufigsten miteinander verwendet werden, und daraus einen Vorschlag für den Benutzer erstellen.
Aber ich kann nicht herausfinden, in welcher Form die Daten indexiert werden. Ich dachte daran, die Abfragen einfach in den Index einzufügen, aber auf diese Weise könnte es viele redundante Daten geben, da viele Dokumente im Index den gleichen Inhalt hätten. Hat jemand irgendwelche Ideen über die Art, wie dies erreicht werden kann?
Danke für die Hilfe.
"Ich dachte daran, die Abfragen einfach in den Index einzufügen, aber auf diese Weise könnte es viele redundante Daten geben, da viele Dokumente im Index denselben Inhalt haben würden"
Sie können an Lucene sagen, dass Sie den Dokumentinhalt nicht speichern sollen, was bedeutet, dass der prinzipielle Overhead entfällt seien Sie die eindeutigen Begriffe und der Index selbst. Daher ist es möglicherweise kein großer Aufwand, jede Abfrage als ein eindeutiges Dokument zu speichern ... auf diese Weise werden Sie keine Informationen wegwerfen.
Zunächst sollten Sie die Abfragen getrennt vom vorhandenen Index speichern. Das Problem besteht nicht in redundanten Daten, sondern in der "Verwässerung" Ihres Indexes. Wenn Sie die Abfragen im selben Index speichern, kann dies die Relevanz Ihrer Suchanfragen beeinträchtigen. Einige Optionen dafür sind:
Zweitens: Vorschläge aus beliebten Abfragen automatisch vorschlagen Verwenden von EdgeNGrams schlägt eine alternative Implementierung des Abfragevorschlags mit Solr vor.