2010-08-03 6 views
6

I haben SOLR konfiguriert Fragmente mit einer fragsize von 500.Anzeige Auslassungs vor und nach Fragment in SOLR

Manchmal zurückzukehren, das ganze Feld ist 500 Zeichen oder weniger, so dass das Fragment zu dem Feld identisch. Für Felder, die länger als das sind, gibt SOLR nur das Fragment ohne irgendeine Angabe zurück (oder so scheint es), dass das Fragment nur einen Teil des Inhalts eines Feldes darstellt. Das bedeutet, dass das Fragment mitten im Satz beginnen könnte.

Ich möchte den Benutzern klar machen, dass sie ein Fragment betrachten und einfach Ellipsen am Ende und/oder Anfang eines solchen Fragments anzeigen. Ist diese Funktionalität in SOLR integriert? Wenn nicht, wie würden Sie Ellipsen einfügen?

Antwort

1

Was ich getan habe, war, sowohl das Fragment als auch das unveränderte Feld, aus dem das Fragment erstellt wurde, zurückzugeben.

Ich schrieb dann eine Logik, die die beiden verglichen, um zu bestimmen, ob Ellipse zum Fragment hinzugefügt werden sollte und wenn ja, ob es vor, nach oder vor und nach dem Fragment hinzugefügt werden soll.

+0

Das habe ich auch gemacht :) +1 –

+0

Ich auch :) Erstellen Sie eine Verbesserungsaufgabe: https://issues.apache.org/jira/browse/SOLR-9271 – cuh

0

Solr gibt keinen Indikator zurück, Sie haben Recht.

Setzen Sie Ihre Fragsize auf 501. Dann ist ein kurzes Stück Logik in Ihrer UI, um zu bestimmen, ob Ellipsen angezeigt werden sollen oder nicht.

Schneiden Sie alles von 501 bis 500 ab und fügen Sie Ellipsen hinzu.

+0

Ja, hatte gehofft, dass ich nur, dass es eine eingebaute Möglichkeit, das zu tun. Auch das lässt mich immer noch mit dem Problem nicht wissen, ob die Ellipse am Anfang oder am Ende des Fragments (oder beides) angezeigt werden soll. – Stefan

-1

Hier ist ein anderer besserer Ansatz. Fügen Sie beim Erstellen des Indexes ein "Teaser" -Attribut hinzu, auf das diese Logik bereits angewendet wurde. Schieben Sie diese Anstrengung aus Ihren Anfragen heraus. Genau so würde ich das machen.

+1

Zur Indexzeit wissen Sie nicht, welcher Teil des Feldes übereinstimmt und somit, was das Fragment sein wird. – Stefan

0

Ich habe gerade das gleiche Problem behandelt. Die Art und Weise ging ich über das tun dies ist die folgende:

  1. die ursprüngliche Zeichenfolge Holen beide
  2. Holen Sie sich die ersten und letzten 10 Zeichen der ursprünglichen Zeichenfolge
  3. Holen Sie sich sowohl die ersten und letzten 10 Zeichen des Fragments zurückgegeben von der Solr-Suche
  4. Vergleichen Sie beide und füllen Sie eine Variable bei Bedarf!

    $f_ellip = NULL; 
    $l_ellip = NULL; 
    if ($orig_body_beggining != substr((string)$hl_content->str, 0, 10)) { 
        $f_ellip = "… "; 
    } 
    if ($orig_body_end != substr((string)$hl_content->str, 0, -10)) { 
        $l_ellip = " …"; 
    } 
    $entry_body = $f_ellip.(string)$hl_content->str.$l_ellip;