RexSearch -Suchergebnisse nicht korrekt

Alles über die Anwendung und Entwicklung von AddOns.

RexSearch -Suchergebnisse nicht korrekt

Beitragvon jvanselow » 22. Nov 2011, 09:29

Hallo ihr alle,

es "brennt" und ich wäre für schnelle Hilfe dankbar...

Auf einer Webseite, die wir gerade entwickeln setzen wir auch RexSearch für die Volltextsuche ein. Leider gibt es da verschiedene Probleme. Diese betreffen leider eine zentrale Funktion der Site, einem selbstentwickelten Addon für "News":

1. Anscheinend wird die Spalte der Tabelle, die die "News" enthält nicht korrekt indexiert. Die News-Tabelle enthält (Datenübernahme aus dem bisherigen Webauftritt des Kunden) über 700 Datensätze. Ein
Code: Alles auswählen
SELECT COUNT( * ) FROM rex_587_searchindex WHERE ftable = rex_kkm02_news
ergibt 431 Datensätze (rex_kkm02_news ist die Tabelle, die die News enthält). Ein
Code: Alles auswählen
Ein  SELECT COUNT( * ) FROM rex_kkm02_news WHERE news_txt IS NOT NUL
jedoch 742 (die Spalte news_txt ist die Spalte, die im Backend von RexSearch als zu indexierende Spalte ausgewählt ist).

2. Wenn ich nun testweise nach einem Begriff suche, bekomme ich teilweise merkwürdige Ergebnisse. Beispiel: Ich suche nach "Sommerfest". Im Frontend erhalte ich EIN Ergebnis. Ein
Code: Alles auswählen
SELECT news_txt FROM `rex_kkm02_news` WHERE `news_txt` LIKE '%Sommerfest%'
erbringt zwei Ergebnisse. Im Backend ist unter Einstellungen - > Suchmodi -> MySQL-Suchmodus die Option "Like...." ausgewählt. Ein
Code: Alles auswählen
SELECT * FROM rex_587_searchindex WHERE plaintext LIKE '%Sommerfest%'
liefert hingegen nur einen Datensatz zurück. Der zweite, in der Newstabelle vorhanden Datensatz ist also offensichtlich nicht indexiert worden.

3. Noch verwirrender wird es dadurch, dass RexSearch bei einigen Suchbegriffen auch falsche Ergebnisse zurückliefert. Die Suche nach dem Begriff "Glockmann" erbringt im Frontend zwei Ergebnisse. Diese verweisen jedoch auf Artikel(!), die den Suchbegriff NICHT enthalten! Weder im Body, noch im Head der Seite. Ein
Code: Alles auswählen
SELECT * FROM rex_587_searchindex WHERE plaintext LIKE '%Glockmann%'
gibt kein Ergebnis zurück. Die Abfrage
Code: Alles auswählen
SELECT * FROM rex_kkm02_news
WHERE news_txt LIKE '%Glockmann%'
jedoch vier.

Fragen über Fragen...ich hoffe irgendjemand hat eine Idee...

Noch zwei Hinweise: Die Indexierung wird komplett abgeschlossen, wenn ic sie im Backend ausführe. Die zu indexiernde Tabellenspalte mit dem Volltext der News wird allerdings in der Textarea, in der die Rückmeldungen eingeblendet werden NICHT aufgeführt.

Viele Grüße
jvanselow
jvanselow
 
Beiträge: 7
Registriert: 7. Nov 2011, 14:29

Re: RexSearch -Suchergebnisse nicht korrekt

Beitragvon Xong » 22. Nov 2011, 11:16

Hi jvanselow,

Bei der Indexierung im Backend wird doch angegeben, wieviele Spalten der Tabelle indexiert wurden. Welche Zahl steht da? Wieviel Datensätze sind tatsächlich in der Tabelle?

jvanselow hat geschrieben:Fragen über Fragen...ich hoffe irgendjemand hat eine Idee...

Deine Informationen beschreiben zwar gut, dass ein Fehler auftritt, aber leider nicht wo er zu finden ist.

Der Fehler liegt aber meist beim Suchmodul. Ich möchte nicht ausschließen, dass bei der Indexierung der Datensätze etwas schiefgeht, allerdings ist das eher unwahrscheinlich.

Welche Plugins sind installiert?
Welche Einstellungen wurden bei RexSearch und seinen Plugins vorgenommen?
Wie sieht das Suchmodul aus?


jvanselow hat geschrieben:Noch zwei Hinweise: Die Indexierung wird komplett abgeschlossen, wenn ic sie im Backend ausführe. Die zu indexiernde Tabellenspalte mit dem Volltext der News wird allerdings in der Textarea, in der die Rückmeldungen eingeblendet werden NICHT aufgeführt.

Was ist damit gemeint? Was ist eine "Texarea, in der die Rückmeldungen eingeblendet werden"? Und was meinst du mit "Die zu indexiernde Tabellenspalte mit dem Volltext der News wird [...] NICHT aufgeführt"?
Edit: Kann es sein, dass du damit das Log der schrittweisen Indexierung meinst? Wenn die Tabellenspalte da nicht aufgeführt wird, könnte das daran liegen, dass das Memory Limit überschritten wurde und Fehlermeldungen auf dem Server nicht angezeigt werden. Aber das hatten wir ja schon mal, wie ich grad seh: addons-f30/rexsearch-indexierung-bleibt-hangen-t17479.html
LG,
Xong

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1560
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Re: RexSearch -Suchergebnisse nicht korrekt

Beitragvon jvanselow » 24. Nov 2011, 14:26

Hallo Xong,

ich meinte in der Tat die Log-Ausgabe bei der schrittweisen Indexierung. Dort erscheint die ausgewählten Tabellenspalte rex_kkm02_news.news_txt überhaupt nicht. Es gibt also auch keine Fehlermeldung. Die Indexierung bleibt auch nicht mehr "hängen", d.h. sie wird mit der entsprechenden Rückmeldung abgeschlossen.

Ich habe bei der Fehlersuche natürlich mittels phpMyAdmin mal direkt in die entsprechenden Tabellen der Datenbank geschaut. Wenn ich Abfrage
Code: Alles auswählen
SELECT COUNT(*) FROM rex_kkm02_news WHERE news_txt IS NOT NULL
ausführe, bekomme ich 742 zurückgeliefert. Das heißt also, das ich in dieser Tabelle 742 Datensätze habe, die potentiell zu indexieren sind.
Code: Alles auswählen
SELECT COUNT(*) FROM rex_587_searchindex WHERE ftable = rex_kkm02_news
erbringt aber nur 431 Datensätze. Wenn die Indexierung korrekt durchgeführt worden ist, müsste diese Abfrage aber doch (so vermute ich jetzt mal) auch 742 Datensätze als Ergebnis zurückliefern. Oder sehe ich das falsch?

Zu deinen Fragen:
Es sind keine weiteren Plugins installiert oder aktiviert
Logischer Suchmodus: Konjunktive Suche (AND)
Textmodus: Durchsuche Text ohne HTML-Tags (Plain)
Ähnlichkeitssuche: Deaktivieren
MySQL-Suchmodus: LIKE
Art und Weise: Indexierung der Artikle über eine HTTP-Get-Anfrage
Offline-Artikel indexieren: false
Artikel (ADD, EDIT, DELETE) automatisch (de)indexieren: true
Extension Point "OUTPUT_FILTER" aufrufen: false
Datenbankspalten in die Suche einschließen: rex_kkm02_news.news_txt
Dateiendungen(frei lassen für beliebige Dateien): pdf
Medienpool indexieren: true
Verzeichnistiefe: 1

Das Suchmodul (habe ich irgendwo aus dem Wiki):
Code: Alles auswählen
<?php

  define('SHOWMAX',5);

  if(!empty($_REQUEST['rexsearch']))
  {
    $rexsearch = new RexSearch();
    $rexsearch->setLimit(array($start = isset($_GET['start'])?intval($_GET['start']):0, SHOWMAX));

    $result = $rexsearch->search($_REQUEST['rexsearch']);
    if(count($result['simwords']) > 0)
    {
      $newsearchString = $result['simwordsnewsearch'];
      $result = $rexsearch->search($newsearchString);
      if($result['count'] > 0)
        echo '<p>Meinten Sie <strong>'.$newsearchString.'</strong>?</p>';
    }

    if($result['count'] > 0)
    {
      echo '<ul class="searchresults">';
      foreach($result['hits'] as $hit)
      {
        if($hit['type'] == 'db_column')
        {
          $text = $hit['article_teaser'];
          if($hit['table'] == $REX['TABLE_PREFIX'].'article')
            $hit['fid'] = $hit['values']['id'];
        }
        else
        {
          $text = $hit['highlightedtext'];
        }

        if($hit['type'] == 'file' AND $hit['fileext'] == 'pdf')
        {
          // PDF-Datei
          $filename = explode('/', $hit['filename']);
          $pdf = OOMedia::getMediaByFileName($filename[count($filename)-1]);

          echo '    <li class="pdf">
      <h4><a href="'.htmlspecialchars($pdf->getFullPath()).'">'.$pdf->getOrgFileName().'</a></h4>
      <p class="highlightedtext">'.$text.'</p>
      <p class="url">'.$REX['SERVER'].'files/'.$pdf->getOrgFileName().'</p>
    </li>';
        }
        else
        {
          // Artikel oder DB-Spalte aus der Artikel-Tabelle
          $article = OOArticle::getArticleById($hit['fid']);

          echo '    <li>
      <h4><a href="'.htmlspecialchars($article->getUrl()).'">'.$article->getName().'</a></h4>
      <p class="highlightedtext">'.$text.'</p>
      <p class="url">'.$REX['SERVER'].rex_getUrl($hit['fid'], $hit['clang']).'</p>
    </li>';
        }
      }
      echo '</ul>';

      // Pagination
      if($result['count'] > SHOWMAX)
      {
        $self = OOArticle::getArticleById(REX_ARTICLE_ID);
        echo '<ul class="searchpagination">';
        for($i = 0; ($i*SHOWMAX) < $result['count']; $i++)
        {
          if(($i*SHOWMAX) == $start)
            echo '<li>'.($i+1).'</li>';
          else
            echo '<li><a href="'.$self->getUrl(array('rexsearch' => $_REQUEST['rexsearch'], 'start' => $i*SHOWMAX)).'">'.($i+1).'</a></li>';
        }
        echo '</ul>';
      }
    }
    else
    {
      echo '<em>Leider nichts gefunden.</em>';
    }
  }

?>
jvanselow
 
Beiträge: 7
Registriert: 7. Nov 2011, 14:29

Re: RexSearch -Suchergebnisse nicht korrekt

Beitragvon Xong » 24. Nov 2011, 14:41

Hi jvanselow!
jvanselow hat geschrieben:Ich habe bei der Fehlersuche natürlich mittels phpMyAdmin mal direkt in die entsprechenden Tabellen der Datenbank geschaut. Wenn ich Abfrage
Code: Alles auswählen
SELECT COUNT(*) FROM rex_kkm02_news WHERE news_txt IS NOT NULL
ausführe, bekomme ich 742 zurückgeliefert. Das heißt also, das ich in dieser Tabelle 742 Datensätze habe, die potentiell zu indexieren sind.
Code: Alles auswählen
SELECT COUNT(*) FROM rex_587_searchindex WHERE ftable = rex_kkm02_news
erbringt aber nur 431 Datensätze. Wenn die Indexierung korrekt durchgeführt worden ist, müsste diese Abfrage aber doch (so vermute ich jetzt mal) auch 742 Datensätze als Ergebnis zurückliefern. Oder sehe ich das falsch?

Nee, ist schon richtig. (Ich nehme mal an, du hast die SQL-Abfrage korrekt gestellt: SELECT COUNT(*) FROM rex_587_searchindex WHERE ftable = 'rex_kkm02_news')

Aber eigentlich gibt es bei der Indexierung einer DB-Spalte nur zwei Möglichkeit: Entweder alle Datensätze werden indexiert oder keine. Der von dir beschriebene Zustand ist also inkosistent und zumindest erstmal merkwürdig.

Kann es sein, dass du im Zuge des letzten Problems eventuell doch was am Code verändert hast?
LG,
Xong

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1560
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Re: RexSearch -Suchergebnisse nicht korrekt

Beitragvon jvanselow » 24. Nov 2011, 16:19

Hi Xong,

nee, ich hab nichts am Code geändert. Nach Anpassung der Werte in der php.ini schien es ja zunächst so, dass die Indexierung funktioniert. Das alles ist in der Tat schon merkwürdig. Ich schau gleich noch was nach. Habe da gerade so eine Idee...

Edit: Ich hatte gerade den Verdacht, dass die Indexierung vielleicht abbricht, wenn ein Feld in der zu indexierende Spalte NULL ist. Oder einfach leer. Entsprechende Felder, auf die das zutrifft, sind aber in der Spalte nicht vorhanden. Da die Spalte aber vom Typ TEXT ist und einzelne Felder sehr viel Text enthalten, halte ich deinen Verdacht (Memory Limit) mittlerweile für ziemlich wahrscheinlich. Ich werde das mal mit erhöhten Werten testen.

lg
jvanselow
jvanselow
 
Beiträge: 7
Registriert: 7. Nov 2011, 14:29


Zurück zu AddOns [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast