Solr Update mit Solr PHP Client

Die Möglichkeit den Index von Solr über einen Full Import zu erneuern ist eine Möglichkeit die eher unhandlich ist. Per Ajax und Apache Solr Service können einzelne Objekte gelöscht, upgedatet und eingetragen werden.

Full Import

Wenn eine gefüllte Solr Instanz besteht und es erfolgt ein erneuter Full Import, führt das dazu, dass alte Datenbestände in der Solr instanz erhalten bleiben. Um dieses Problem zu umgehen, kann natürlich vorher ein DELETE ausgeführt werden. Zwischen der Zeit des DELETEs und des Full Imports befinden sich in der Suchmaschinen Instanz keine Daten, was sich negativ auf das Programm auswirken kann.

Eine bessere Möglichkeit ist, neue Daten einzeln zu erfassen, und nur in größeren Zeitabständen den Index neu zu generieren.

Apache Solr Service

Mit der freien Solr PHP Client bzw. der Klasse Apache Solr Service ist mit Solr zu kommunizieren einfach wie noch nie. Die Klasse kann sogar per Ajax angesprochen werden, aber dazu später.

Solr PHP Client integrieren

Wir benötigen eine PHP Datei, in der wir die Klasse einbinden. Aufgerufen werden kann sie direkt über den Browser und ebenfalls über einen Cronjob.

Solr Update Skript

Dieses Script führt eine Solr Suche mit einer mitgegebenen ID durch. Wird die ID in Solr gefunden, dann wird der Datensatz upgedatet.

	require("SolrPhpClient/Apache/Solr/Service.php");

	$query = "id:123";
	$results = false;
	$limit = 1;

	$solr = new Apache_Solr_Service(SOLR_DIR, SOLR_PORT, SOLR_PATH);

	if (get_magic_quotes_gpc() == 1) {
	  $query = stripslashes($query);
	}

    try {
    	$results = $solr->search($query, 0, $limit);
    }
    catch(Exception $e) {
    	echo $e->getMessage();
    	exit();
    }

    # prüfen ob der Eintrag der upgedatet werden soll, in Solr existiert
    if(isset($results->response->docs[0])) {

	  	$document = new Apache_Solr_Document();

	  	# Data
		$document->text =       "Test 123";
		$document->inhalt =     $inhalt;

		if($solr->addDocument($document))
	  		echo "OK";

	  	$solr->commit(); //commit to see the deletes and the document
    }
    else
    	echo "Kein Eintrag gefunden";

Achtung! Ohne den Commit Befehl geschieht gar nichts.

Apache Solr Service Features

Weitere Features wie

  • Ping (prüfen ob Solr Verfügbar)
  • Uniqid
  • Optimize

können diesem Quelltext entnommen werden. Mit Ping haben wir auf Ubuntu Ebene schlechte Erfahrungen gemacht, da der Server für die Ping Methode teilweise nicht erreichbar war.

  $solr = new Apache_Solr_Service(); //or explicitly new Apache_Solr_Service('localhost', 8180, '/solr')

  if ($solr->ping())
  {
  		$solr->deleteByQuery('*:*'); //deletes ALL documents - be careful 🙂

  		$document = new Apache_Solr_Document();
  		$document->id = uniqid(); //or something else suitably unique

  		$document->title = 'Some Title';
  		$document->content = 'Some content for this wonderful document. Blah blah blah.';

  		$solr->addDocument($document); 	//if you're going to be adding documents in bulk using addDocuments
  										//with an array of documents is faster

  		$solr->commit(); //commit to see the deletes and the document
  		$solr->optimize(); //merges multiple segments into one

  		//and the one we all care about, search!
  		//any other common or custom parameters to the request handler can go in the
  		//optional 4th array argument.
  		$solr->search('content:blah', 0, 10, array('sort' => 'timestamp desc'));
  }

Solr Multicore Setup

Hilfe zur Multicoresetup von Solr gibt es hier.

Solr Config und Solr Search

Hilfe zur Konfiguration von Solr und näher Informationen zu Solr Search gibt es hier.

Sei sozial und teile

Über den Autor Andreas Grundner

Ich bin Wordpress, Joomla, Typo3 Integrator, Unix Rootserver Administrator und Webanwendungsprogrammierer. Mittlerweile habe ich über 70 Webprojekte weitgehend selbstständig mit enger Kundenabsprache realisiert. Ich bin auf One Page Websites auf Wordpress-Basis spezialisiert, biete aber auch Suchmaschinenoptimierung (SEO), Blogs, Facebook, Youtube und Google+ Seiten an. Meine Verpflichtung gilt dem Datenschutz, meine Leidenschaft dem Finden und Aufzeigen von Sicherheitslücken in Webanwendungen.

2 Reaktionen zu Solr Update mit Solr PHP Client

  1. chanel outlet
    11.04.2014 at 00:12 · Antworten

    This is a really good read for me, Must admit that you are one of the best bloggers I ever saw.Thanks for posting this informative article.

  2. flange made in china
    17.03.2014 at 18:09 · Antworten

    This is a really good read for me, Must admit that you are one of the best bloggers I ever saw.Thanks for posting this informative article.

Meinung sagen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.