Erzeugen einer Sitemap aus einem Solr-Index
Unsere Kunden fragen oft, ob Solr die Erstellung einer Sitemap aus einem bestehenden Solr-Index unterstützt. Solr verfügt zwar über eine…
Unsere Kunden fragen oft, ob Solr die Erstellung einer Sitemap aus einem bestehenden Solr-Index unterstützt. Solr verfügt zwar über eine Reihe von APIs mit vollem Funktionsumfang, aber diese Schnittstellen sind im Allgemeinen eher darauf ausgerichtet, eine allgemeine Datenverwaltungsplattform für Ihre Anwendung bereitzustellen. Die kurze Antwort lautet also: Nein, Solr verfügt nicht über eine spezielle API für die Erstellung von Sitemaps, RSS-Feeds und so weiter.
Mit ein paar Zeilen Code können Sie jedoch Ihren eigenen Sitemap-Generator erstellen.
Für die Zwecke dieses Artikels habe ich rudimentäre Sitemap-Generatoren in Java, PHP und Python geschrieben. Sie finden jedes dieser Beispiele weiter unten. Sie sind alle ungefähr gleich lang und tun alle so ziemlich das Gleiche:
1) Rufen Sie die Sammlungen-API mit dem Namen der Sammlung auf und rufen Sie die Daten ab.
2) Drehen Sie den Rohinhalt in ein JSON-Objekt um.
3) Iterieren Sie über das Dokument, um die URLs zu extrahieren und sie in die XML-String-Ausgabe zu schreiben.
4) Drucken Sie das Ergebnis aus.
I). Java Sitemap Beispiel
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.util.Iterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; public class Sitemap { public static void main(String[] args) { String url = "http://localhost:8983/solr/[MY_COLLECTION_NAME]/select?q=*%3A*&wt=json"; StringBuffer buf = new StringBuffer(); try { URL solrSite = new URL(url); BufferedReader in = new BufferedReader( new InputStreamReader(solrSite.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) { buf.append(inputLine); } in.close(); JSONParser parser = new JSONParser(); JSONObject jsonObject = (JSONObject) parser.parse(buf.toString()); JSONObject resp = (JSONObject) jsonObject.get("response"); JSONArray docs = (JSONArray) resp.get("docs"); Iterator<JSONObject> iter = docs.iterator(); JSONObject doc; buf = new StringBuffer(); buf.append("<?xml version="1.0" encoding="UTF-8"?>"); buf.append("<urlset ; $docs = $json["response"]["docs"]; foreach($docs as $key=>$doc){ $output .= "<url>"; $output .= "<loc>" . $doc["id"] . "</loc>"; $output .= "</url>"; } $output .= "</urlset>"; echo $output; ?>
III). Python Sitemap Beispiel
#!/usr/bin/env python2 #encoding: UTF-8 import urllib import json if __name__ == "__main__" link = "http://localhost:8983/solr/[MY_COLLECTION_NAME]/select?q=*%3A*&wt=json" f = urllib.urlopen(link) myfile = f.read() stdout = "<?xml version="1.0" encoding="UTF-8"?><urlset + url["id"] + " </loc></url>"; stdout += "</urlset>" print stdout
Hinweis: In den obigen Beispielen gebe ich einfach das Ergebnis aus. Für Ihre Implementierung möchten Sie die Ausgabe in das Stammverzeichnis Ihrer Website schreiben. Diese Aufgabe lässt sich mit einem einfachen Cron-Job automatisieren. Hier finden Sie eine schöne Anleitung zum Erstellen von Cron-Jobs. Auch für dieses Beispiel habe ich versucht, meine Importe auf das zu beschränken, was mit einer einfachen Kerninstallation einer beliebigen Sprache verfügbar ist. Es gibt sicherlich viele Möglichkeiten, wie Sie vorgehen können, aber dies ist ein grundlegendes Beispiel. Außerdem setze ich hier nur das erforderliche ‚loc‘-Element und verwende das ‚id‘-Feld, das beim Crawlen des Dokuments erfasst wurde. Sie könnten diese um die anderen Optionselemente erweitern (z.B. last_modified, etc.).
Viel Spaß beim Mappen!