Seite 2 von 2

Re: Suche mit Berücksichtigung Frontend-Gruppen und Gewichtu

Verfasst: Fr 14. Okt 2016, 12:23
von McHubi
Hallo Freddy,
Was genau wird berücksichtigt??
Das sind die Inhalte der DB-Tabellen con_content und con_meta_tag. Die weiteren Tabellen (con_...) dienen zur genauen Lokalisation der Inhalte bzw. Aufbau der Suchanfragen und zur Einbindung der Frontenduser.
Mögliche Suchworte aus anderen Module die nicht in CMS_HTML stehen werden z.B. nicht angezeigt.
Die tauchen dann auch nicht in der con_content auf, oder? Die von Modulen produzierten Inhalte kann die Suche nur dann berücksichtigen, wenn genau klar ist, in welcher DB-Tabelle die Inhalte hinterlegt sind. Und da hier jedes Modul anders ticken kann, kann das Suchmodul das auch nicht von vornherein berücksichtigen (Glaskugel :wink: )
Deswegen habe ich relevante Suchbegriffe in den Meta-Keywords eingegeben. Diese werden aber nicht in der Suche berücksichtigt. Meta-Keywords werden wohl nur für die Wertung des Suchwortes berücksichtigt wenn diese vorher im CMS_HTML stand.
Richtig. Denn sonst würdest Du Suchmaschinen im Quelltext einen Inhalt vorgaukeln, der gar nicht vorkommt. Ein beliebter Trick aus den Anfangszeiten von SEO, der aber schon seit Ewigkeiten für Penalties sorgt. Insofern werden die Inhalte in den Meta-Tags nur berücksichtigt, wenn sie tatsächlich im Seitencontent vorkommen. Das gilt übrigens auch für die Description.
Kann man das Modul soweit umbauen, dass wenn das Suchwort nur in den Meta-Keywords steht auch in den Suchergebniss auftaucht??
Ja. Allerdings rate ich davon, aus den eben genannten Gründen, ab.

VG,

Markus

Re: Suche mit Berücksichtigung Frontend-Gruppen und Gewichtu

Verfasst: Mo 17. Okt 2016, 07:44
von Freddy
Hallo Markus,
deine Aussage
Richtig. Denn sonst würdest Du Suchmaschinen im Quelltext einen Inhalt vorgaukeln, der gar nicht vorkommt. Ein beliebter Trick aus den Anfangszeiten von SEO, der aber schon seit Ewigkeiten für Penalties sorgt. Insofern werden die Inhalte in den Meta-Tags nur berücksichtigt, wenn sie tatsächlich im Seitencontent vorkommen. Das gilt übrigens auch für die Description.
stimmt ja nicht ganz. Mein Problem ist ja das durch das Kontaktmodul der Namen der Kontaktperson ausgegeben wird aber wohl nicht in er DB gespeichert wird und damit nicht in der Suche berücksichtigt wird. Ich gaugel also der Suchmaschine nicht einen Inhalt vor der nicht im Quelltext ist. Ich dachte nur das man die Suchergebnisse mit Eingabe von Keywords noch optimieren könnte. Ich würde mich doch selbst reinlegen wenn ich dort nicht relevante Begriffe reinschreiben würde.

Re: Suche mit Berücksichtigung Frontend-Gruppen und Gewichtu

Verfasst: Mo 17. Okt 2016, 09:16
von McHubi
Moin Freddy,
stimmt ja nicht ganz.
Doch, bei Deiner bisherigen Schilderung schon. Wobei diese seiteninterne Suche natürlich nicht mit google & Co. gleichzusetzen ist... :wink:
Mein Problem ist ja das durch das Kontaktmodul der Namen der Kontaktperson ausgegeben wird aber wohl nicht in er DB gespeichert wird und damit nicht in der Suche berücksichtigt wird.
Das hattest Du so im Detail noch gar nicht beschrieben (-> Glaskugel).

Hier gibt's dann zwei Ansätze: Entweder Du bekommst per Modul den fraglichen Inhalt in die con_content oder Du musst halt das Modul anpassen damit Metadaten unabhängig von der con_content gefunden werden.

Lösungsansatz und Infos zum aktuellen Modul für letzteres:
Im Bereich /********** collecting idartlang, idtype and amount of hits begin **********/ werden alle Artikel in der con_content gesammelt und nach dem Begriff durchsucht. Im Array $array_detections wird der Artikel hinterlegt sofern ein Treffer gefunden wurde. Sie ist die Basis für die spätere Wertung und Suche in den Metadaten. Das kannst Du grundsätzlich so lassen. Die später folgende Query zu den Metadaten hängt aktuell also von den Inhalten dieses Arrays ab:

Code: Alles auswählen

foreach($array_detections AS $element) {...
Ist Dein Suchbegriff zwar in den Metadaten enthalten aber nicht in der con_content, wird er also in der derzeitigen Version der Suche nicht gefunden.
Im Abschnitt /* searchstring contained in metadata begin */ findest Du die Query zu den Metadaten. Die könntest Du aber grundsätzlich auch so belassen wie sie ist.

Dein Ansatzpunkt ist eine zusätzliche Query über die Tabelle con_meta_tag, die das Array $array_detections nach dem Crawlen der con_content ergänzt. Also im Anschluss an /********** collecting idartlang, idtype and amount of hits end **********/ lässt Du eine Suche über die con_meta_tag laufen, die das Array $array_detections um weitere Artikel ergänzt, bei denen der Suchbegriff ausschließlich in den Metatags steht. Dazu brauchst Du nur die schon vorhandene Suche über die con_content im Abschnitt

Code: Alles auswählen

/********** collecting idartlang, idtype and amount of hits begin **********/
// array contains all idtypes with hits, so idartlang might be contained several times
$query = "SELECT idartlang,idtype,value FROM con_content ORDER BY idartlang ASC";
$result = cRegistry::getDb();
$result->query($query);

$array_detections=array();
while($result->nextRecord())
  {
  $array_crawler=$result->toArray();
  $conversion=utf8_encode(html_entity_decode(stripslashes(mb_strtolower($array_crawler[value]))));
  if(strpos(" ".$conversion,$string_search))
    {
   $amount_of_hits=substr_count($conversion,$string_search);
    $array_detections[]=array('idartlang'=>$array_crawler[idartlang],'idtype'=>$array_crawler[idtype],'hits'=>$amount_of_hits);
    }
  }
/********** collecting idartlang, idtype and amount of hits end **********/
duplizieren, anpassen und als eigenen Abschnitt direkt im Anschluss anhängen.

Wichtig ist dabei, dass Du hier Doppelungen ausschließt. Heißt, entweder sofort beim Ergänzen des Arrays schauen, ob die idartlang schon enthalten ist oder nach Erstellung des Arrays bereinigen. Bei letzterem stellt sich aber die Frage, welcher der beiden Einträge zu dem Webartikel "wertvoller" ist: Der aus der con_content entstandene oder der aus der con_meta_tag? -> Nimm den aus der con_content. Was bedeutet: Sofort beim Ergänzen des Arrays schauen, ob die idartlang schon enthalten ist.

Hinweis: Diese Kurzlösung verursacht eine Doppeldurchsuchung der con_meta_tag. Zuerst vollständig (was Dein Problem löst aber je nach Umfang der Seite entsprechend dauert) und danach noch einmal (wie bisher) dediziert nach den Artikeln in denen der Suchbegriff bereits gefunden wurde. Den Bereich mit der (dann) zweiten Query über die con_meta_tag kannst Du aber auch nicht einfach rauswerfen, da hier die Gewichtung mit untergebracht ist. Heißt: Es dürfte länger dauern bis Ergebnisse im Frontend erscheinen.

Das Ganze zu optimieren statt wie geschildert einfach die Lösung Deines Problems als eigenen Bereich einzuschieben, ist dann schon größerer Aufwand.

Re: Suche mit Berücksichtigung Frontend-Gruppen und Gewichtu

Verfasst: Mo 17. Okt 2016, 10:30
von Freddy
Hallo Markus,
vielen Dank für deine Antwort und Tipps. Ich habe mein Kontaktmodul umgebaut und jetzt den Kontaktnamen ins CMS_TEXT gespeichert statt CMS_VAR. Jetzt funktioniert die Suche super. Jetzt ist mir beim Testen aufgefallen das Umlaute in Suchbegriffe keine Ergebnisse gefunden werden. Eigentlich werden doch bei diesem Suchmodul auch Umlaute berücksichtigt oder??
_

Re: Suche mit Berücksichtigung Frontend-Gruppen und Gewichtu

Verfasst: Mo 17. Okt 2016, 11:28
von McHubi
Hallo Freddy,
Ich habe mein Kontaktmodul umgebaut und jetzt den Kontaktnamen ins CMS_TEXT gespeichert statt CMS_VAR.
:D

ja, Umlaute werden berücksichtigt - funktioniert auf den Seiten in denen ich die Suche einsetze auch einwandfrei. Lass Dir mal an ein paar Stellen die Variable $string_search auswerfen und schau mal in die Datenbank wie der Begriff dort gespeichert wurde.

VG,


Markus

Re: Suche mit Berücksichtigung Frontend-Gruppen und Gewichtu

Verfasst: Mo 17. Okt 2016, 16:13
von Freddy
Habe mal nach Suchwort Männer aber auch nach Männer gesucht. Beides mal ohne Erfolg. Der $string_search ist auch genau die Ausgabe die ich ins Suchfeld eingegeben habe. In der Datenbank ist in der value folgender Text drin

Code: Alles auswählen

<p>M&auml;nner brauchen Freiheit, Abenteuer und Sport. Go-Kart-Rennen...</p>
Funktioniert das PHP vielleicht nicht ganz richtig? Habe PHP-Version 7.0.12. Im Fehlerlog ist aber kein Eintrag diesbezüglich drin.

Re: Suche mit Berücksichtigung Frontend-Gruppen und Gewichtu

Verfasst: Mo 17. Okt 2016, 16:37
von McHubi
Ist bei mir mit den entities genauso. Hast Du Dir die Frontendausgabe von $string_search im Quelltext angeschaut? Weil da kann sowohl ä als auch &auml; stehen und der Browser stellt beides als ä dar.

Hast Du die Seite "offiziell" schon im Einsatz? Wenn nicht, kannst Du ggf. mal zum Testen auf auf PHP 5.6 gehen. Ich werde die Suche aber selbst auch mal unter PHP 7 testen. Das im Errorlog nichts steht, ist normal weil kein Fehler vorliegt sondern nur nichts gefunden wurde. Ansonsten kannst Du am Anfang des Outputs auch die arrays search/replace mal mit Umlauten und den passenden entities füttern...

Re: Suche mit Berücksichtigung Frontend-Gruppen und Gewichtu

Verfasst: Mo 17. Okt 2016, 17:26
von Freddy
Im Quelltext wird ä als auch &auml; ausgegeben wie ich es halt eingebe. Die Seite ist zwar offiziell im Einsatz aber ich habe eine zweite Installation zum bauen auch online. Aber mit PHP 5.6 funktioniert es leider auch nicht.

Re: Suche mit Berücksichtigung Frontend-Gruppen und Gewichtu

Verfasst: Mo 17. Okt 2016, 20:12
von McHubi
Wenn Du willst, kannst Du mir per PN mal Zugangsdaten für die "Bauversion" zukommen lassen. Am besten auch für die Datenbank (dort nur zum Reinschauen, rumtesten würde ich ausschließlich im Modul). Denn erklären kann ich mir das Verhalten nicht. Ich kann es auch nicht nachstellen...

Re: Suche mit Berücksichtigung Frontend-Gruppen und Gewichtu

Verfasst: Di 18. Okt 2016, 13:25
von McHubi
Hallo Freddy,

Lösung war einfacher als gedacht. Da das Problem beim Suchbegriff nicht zu lokalisieren war, habe ich mir die Inhalte die aus der Datenbank zur Prüfung gezogen werden angeschaut. Die sind in der Variablen $conversion zu finden. Damit wird einiges "angestellt" um ein Durchsuchen zu ermöglichen (z. B. alles klein geschrieben um das Thema Case-sensitive zu umgehen):

Code: Alles auswählen

$conversion=utf8_encode(html_entity_decode(stripslashes(mb_strtolower($array_crawler[value]))));
Wenn Du Dir den Inhalt der Variablen (auf Deiner Seite, auf meinen trifft das nicht zu) im Frontend ausgeben lässt, wird aus dem Wort "Eindrücke" dann ein "eindrücke" - was natürlich nicht mit dem Suchbegriff übereinstimmt, selbst wenn in der DB alles korrekt hinterlegt ist. Lösung war hier, einfach das utf8_encode wegzulassen:

Code: Alles auswählen

$conversion=html_entity_decode(stripslashes(mb_strtolower($array_crawler[value])));
Schon klappt's mit den Umlauten... :D

VG,

Markus