Dies ist der vierte und letzte Teil einer Serie zur Verwendung von Apache Solr -Suchimplementierung zusammen mit Solarium, einer PHP -Bibliothek, um sie in Ihre Anwendung zu integrieren, als ob sie nativ wäre.
In den ersten drei Teilen haben wir Solr und Solarium installiert und konfiguriert und begannen, eine Beispielanwendung für die Suche nach Filmen zu erstellen. Wir haben uns auch auf Facettensuche angesehen.
Wir werden die Serie abschließen, indem wir einige fortgeschrittenere Funktionen von Solr ansehen und wie man sie mit Solarium verwendet.
Mit der Hervorhebungskomponente können Sie die Teile eines Dokuments hervorheben, die mit Ihrer Suche übereinstimmen. Sein Verhalten um das, was gezeigt wird Wörter aber mit Ausschnitten; Ähnlich wie die Suchergebnisse von Google.
Um hervorzuheben, müssen Sie zunächst die Felder angeben. Anschließend können Sie ein Präfix und ein entsprechendes Postfix für die hervorgehobenen Wörter oder Phrasen festlegen. Also zum Beispiel, um hervorgehobene Wörter und Phrasen mutig zu machen:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
Alternativ eine Hintergrundfarbe hinzufügen:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');
Oder Sie können sogar pro Feldeinstellungen verwenden:
$hl = $query->getHighlighting(); $hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>'); $hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
Sobald Sie die Hervorhebungskomponente in Ihrer Suchimplementierung konfiguriert haben, müssen sie in Ihrer Suchergebnisansicht etwas mehr Arbeit beteiligen.
.Zunächst müssen Sie das hervorgehobene Dokument aus der Hervorhebungskomponente durch ID extrahieren:
$highlightedDoc = $highlighting->getResult($document->id);
Jetzt können Sie auf alle hervorgehobenen Felder zugreifen, indem Sie sie durch sie als Eigenschaften des hervorgehobenen Dokuments iteriert:
if($highlightedDoc){ foreach($highlightedDoc as $field => $highlight) { echo implode(' (...) ', $highlight) . '<br/>'; } }
Oder Sie können Getfield (): verwenden
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
hervorgehobene Felder geben nicht einfach den Text zurück, sondern geben jedoch eine Reihe von "Snippets" von Text zurück. Wenn es keine Übereinstimmungen für dieses bestimmte Feld gibt - zum Beispiel, wenn Ihre Suche auf dem Titel, jedoch keine Zusammenfassung -, ist dieses Array leer.
Der obige Code gibt maximal ein Snippet zurück. Um dieses Verhalten zu ändern, können Sie die Methode setSnippets () verwenden:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');
Angenommen, Sie suchen nach dem Wort "Stern". Eines der Ergebnisse hat eine Zusammenfassung, die wie folgt liest:
Das Synopsis -Array des hervorgehobenen Dokuments enthält drei Elemente:Dieses nicht zu verpasste Kino -Event wird einen der denkwürdigsten Momente in der TV -Geschichte und exklusive Clips über die Herstellung des Besten von Welten und Star Trek: The Next Generation Staffel 3. im 24. Jahrhundert zeigen. Die nächste Generation wurde über 20 Jahre nach der ursprünglichen Star Trek -Serie von Gene Roddenberry erstellt. Die nächste Generation wurde zur längsten laufenden Serie des Star Trek -Franchise, bestehend aus 178 Folgen über 7 Spielzeiten. Star Trek: Die nächste Generation-Das Beste aus beiden Welten ist die erste Gelegenheit, um das Beste aus beiden Welten zu sehen, eine der größten TV-Episoden aller Zeiten, als ein herrlich remasteredes Feature in voller Länge in ausgewählten Kinos im ganzen Land. >
$hl = $query->getHighlighting(); $hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>'); $hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
Geschichte und exklusive Clips über die Herstellung der Besten von Welten und Star Trek: Die nächste Generation… nach der ursprünglichen Star Trek -Serie. Die nächste Generation wurde zur längsten laufenden Serie des Stars… Trek -Franchise, bestehend aus 178 Folgen über 7 Spielzeiten. Star Trek: Die nächste Generation - das Beste vonEs gibt eine Reihe anderer Parameter, mit denen Sie das Verhalten der hier erklärenden Komponente ändern können.
Integrieren Sie das Hervorheben in unsere Filmsuche
Das erste, was Sie tun müssen, ist die Änderung von App/Controllern/homecontroller.php, indem Sie Folgendes hinzufügen, kurz bevor wir die Suche ausführen:
$highlightedDoc = $highlighting->getResult($document->id);
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
Beachten Sie, wie jedes Suchergebnis im Wesentlichen Felder zwischen dem Suchergebnisdokument und dem hervorgehobenen Dokument mischt und übereinstimmt - letzteres ist effektiv eine Untergruppe der ersteren. Abhängig von Ihrem Schema haben Sie möglicherweise alle Ihre Felder in der hervorgehobenen Version verfügbar.
Mit der Sugchester -Komponente werden Abfragebedingungen basierend auf unvollständigen Abfrageneingaben vorgeschlagen. Im Wesentlichen untersucht es den Index in einem bestimmten Feld und extrahiert Suchbegriffe, die einem bestimmten Muster entsprechen. Sie können diese Vorschläge dann nach Frequenz bestellen, um die Relevanz der Suche zu erhöhen.
Um den Vorschlag einzurichten, müssen wir ihn in Ihrer Datei eLrconfig.xml konfigurieren. Öffnen Sie es an den folgenden Ausschnitten von XML in der Nähe des anderen
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');
Sie werden eine Reihe von Verweisen auf "Rechtschreibprüfung" bemerken, aber dies liegt einfach daran, dass die Sughtester -Komponente in interner Funktionen wiederverwendet.
Das wichtige Bit ist das i -Element
Solr neu starten, und Sie können jetzt versuchen, eine Vorschlag -Abfrage durch Ihren Webbrowser auszuführen:
$hl = $query->getHighlighting(); $hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>'); $hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
(Möglicherweise müssen Sie die Portnummer ändern, je nachdem, wie Sie Solr einrichten)
Die Ausgabe sollte ein wenig so aussehen:
$highlightedDoc = $highlighting->getResult($document->id);
Wie Sie sehen können, hat Solr vier mögliche Übereinstimmungen für „Ho“ - *ho ** verwendet, ** ho ** verwendet, ** ho ** rror und ** ho ** me. Trotz *zu Hause und Horror vor House im Alphabet erscheint House
, weil er zuerst einer der häufigsten Suchbegriffe in unserem Index ist .Verwenden wir diese Komponente, um eine automatische Vervollständigung für unser Suchfeld zu erstellen. Dies schließt gemeinsame Suchbegriffe vor, wenn der Benutzer ihre Abfrage eingibt.
Definieren Sie zuerst die Route:
if($highlightedDoc){ foreach($highlightedDoc as $field => $highlight) { echo implode(' (...) ', $highlight) . '<br/>'; } }
Integrieren Sie die JQuery UI (und JQuery selbst) in Ihr Layout:
if($highlightedDoc){ $highlightedTitle = $highlightedDoc->getField('title'); }
Fügen Sie ein JQuery UI -Thema ein:
$hl = $query->getHighlighting(); $hl->setSnippets(5); // . . . as before . . .
und schließlich einige JS hinzufügen, um die automatische Vervollständigung zu initialisieren:
implode(' ... ', $highlightedDoc->getField('synopsis'))
Das ist alles, was es gibt - probieren Sie es aus, indem Sie ein paar Suchvorgänge ausführen.
Wenn Sie es vorziehen, können Sie mit einem Array Ihre Abfrage einrichten - zum Beispiel:
// Get highlighting component, and apply settings $hl = $query->getHighlighting(); $hl->setSnippets(5); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>'); // Execute the query and return the result $resultset = $this->client->select($query);
Beim Start durchquert Solr das angegebene Heimverzeichnis, das nach Kernen sucht, die identifiziert, wenn es eine Datei namens Core.Propeties lokalisiert. Bisher haben wir einen Kern namens Collection1 verwendet und Sie werden sehen, dass er drei Schlüsselelemente enthält:
Die Datei core.Propertes. Im grundlegendsten enthält es einfach den Namen der Instanz.
Das Conf -Verzeichnis enthält die Konfigurationsdateien für die Instanz. Dieses Verzeichnis muss mindestens ein Schema.xml und eine Solrconfig.xml -Datei enthalten.
Das Datenverzeichnis enthält die Indizes. Der Ort dieses Verzeichnisses kann überschrieben werden, und wenn es nicht vorhanden ist, wird es für Sie erstellt.
Befolgen Sie also eine neue Instanz:
name = instacnaName
… wo InstalcaNAname der Name Ihres neuen Verzeichnisses ist.
Beachten Sie, dass die Schema.xml -Konfiguration, die im Beispielverzeichnis geliefert wird, Verweise auf eine Reihe von Textdateien enthält - z.
dann Solr.neu starten
Sie können auch über die administrative Webschnittstelle in Ihrem Webbrowser einen neuen Kern hinzufügen. Klicken Sie auf der linken Seite auf den Kernadministrator und fügen Sie dann Kern hinzu.zusätzliche Konfiguration
Die stoppwords.txt-Datei-oder genauer gesagt, die sprachspezifischen Dateien wie Lang/Stopwords_en.txt-enthalten Wörter, die vom Suchindexer wie "A", "The" und "At" ignoriert werden sollten . In den meisten Fällen müssen Sie diese Datei wahrscheinlich nicht ändern.
Abhängig von Ihrer Anwendung finden Sie möglicherweise, dass Sie protords.txt Wörter hinzufügen müssen. Diese Datei enthält eine Liste geschützter Wörter, die nicht "eingebildet" sind - dh auf ihre Grundform reduziert. Zum Beispiel wird "gefragt" "fragen", "Arbeiten" wird zu "Arbeit". Manchmal stammenden Versuche, Wörter zu „korrigieren“ und vielleicht das zu entfernen, was es hält, sind fehlerhafte Zahlenbuchstaben am Ende. Möglicherweise haben Sie mit geografischen Gebieten zu tun und feststellen, dass „Maine“ auf „Maine“ zurückzuführen ist.
Sie können Synonyme - Wörter mit der gleichen Bedeutung - in Synonyms.txt angeben. Separate Synonyme mit Kommas pro Line. Zum Beispiel:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');
Zusammenfassung
Zum weiteren Lesen möchten Sie den Solr -Referenzhandbuch als PDF herunterladen oder die Solarium -Dokumentation konsultieren.
Was ist der Unterschied zwischen Solarium und Stellarium? Andere Software. Solarium ist eine PHP -Bibliothek, die eine API für die Interaktion mit Solr, einer leistungsstarken Suchplattform, bereitstellt. Andererseits ist Stellarium ein kostenloses Open -Source -Planetarium für Ihren Computer. Es zeigt einen realistischen Himmel in 3D, genau wie das, was Sie mit bloßem Auge, Fernglas oder einem Teleskop sehen. Sie müssen zunächst eine Client -Instanz mit der Konfiguration Ihres Solr -Servers erstellen. Anschließend können Sie eine ausgewählte Abfrage mit der Client CreateSelect -Funktion erstellen. Sie können verschiedene Parameter für die Abfrage festlegen, z. B. die Felder, die zur Rückgabe, die Abfragezeichenfolge und alle Filter. Sobald die Abfrage eingerichtet ist, können Sie sie mit der Ausführungsfunktion des Clients ausführen, die ein Ergebnissatz zurückgibt, das Sie iterieren können, um auf die einzelnen Dokumente zuzugreifen.
Wie kann ich Facetten mit Solarium und Solr? Müssen zunächst eine ausgewählte Abfrage mit der Erstellungsfunktion des Clients erstellen. Anschließend können Sie mit der AddfacetSet -Funktion eine Facette zur Abfrage hinzufügen. Sie können dem Facettensatz verschiedene Arten von Facetten hinzufügen, z. B. Feldfacetten, Abfragefacetten und Bereichsfacetten. Sobald die Facetten eingerichtet sind, können Sie die Abfrage mit der Ausführungsfunktion des Clients ausführen, wodurch ein Ergebnissatz zurückgegeben wird, das die Facettenergebnisse enthält. 🎜> Um das Hervorheben mit Solarium und Solr zu verwenden, müssen Sie zunächst eine Select -Abfrage mit der Erstellungsfunktion des Clients erstellen. Anschließend können Sie der Abfrage einen Textmarker mit der AddHighlighting -Funktion hinzufügen. Sie können verschiedene Parameter auf dem Textmarker festlegen, z. Sobald der Highlighter eingerichtet ist, können Sie die Abfrage mit der Ausführungsfunktion des Clients ausführen, wodurch ein Ergebnissatz zurückgegeben wird, das die Hervorhebungsergebnisse enthält.
Das obige ist der detaillierte Inhalt vonVerwenden von Solarium mit Solr zur Suche - Fortgeschrittene. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!