2010-08-03 14 views
6

mam SOLR skonfigurowany, aby powrócić fragmenty z fragsize 500.Wyświetlacz elipsa przed i po fragmencie w SOLR

Czasami, całe pole jest 500 znaków lub mniej, więc fragment jest identyczny z pola. W przypadku pól dłuższych niż to, SOLR po prostu zwraca fragment bez żadnego wskazania (lub tak się wydaje), że fragment reprezentuje tylko część zawartości pola. Oznacza to, że fragment może rozpocząć się w połowie zdania.

Chcę pokazać użytkownikom, że patrzą na fragment i po prostu wyświetlić ellipsis na końcu i/lub rozpocząć taki fragment. Czy ta funkcjonalność jest wbudowana w SOLR? Jeśli nie, to w jaki sposób wstawiłbyś elipsę?

Odpowiedz

1

W rezultacie otrzymałem zarówno fragment, jak i niezmienione pole, z którego utworzono fragment.

Następnie napisałem pewną logikę, która porównała te dwie wartości, aby określić, czy elipsa powinna zostać dodana do fragmentu, a jeśli tak, to czy dodać ją przed, po czy w obu przed i po fragmencie.

+0

Tak też zrobiłem :) +1 –

+0

Ja też :) Utwórz zadanie ulepszenia: https://issues.apache.org/jira/browse/SOLR-9271 – cuh

0

Solr nie zwróci wskaźnika, masz rację.

Ustaw swoje fragsize na 501. Następnie jest to szybki układ logiczny w twoim interfejsie, aby określić, czy elipsa ma być wyświetlana, czy nie.

Skróć wszystko od 501 do 500 i dodaj wielokropek.

+0

Tak, miałem tylko nadzieję, że nie ma wbudowanego sposób to zrobić. Ponadto, nadal pozostaje mi problem polegający na tym, że nie wiem, czy wyświetlić elipsę na początku, czy na końcu fragmentu (lub obu). – Stefan

-1

Oto kolejne lepsze podejście. Podczas tworzenia indeksu dodaj atrybut "zwiastuna", który ma już zastosowaną logikę. Wypchnij ten wysiłek ze swoich żądań. Tak właśnie bym to zrobił.

+1

W czasie indeksowania nie wiesz, która część pola pasuje, a tym samym, jaki fragment będzie. – Stefan

0

Właśnie zajmowałem się tą samą kwestią. Sposób, w jaki chodził, czyniąc ten jest następujący:

  1. Get oryginalny łańcuch
  2. Get zarówno pierwsze i ostatnie 10 znaków oryginalnego napisu
  3. Uzyskaj oba pierwsze i ostatnie 10 znaków fragmentu zwracane przez wyszukiwanie Solr
  4. Porównaj oba i wypełnij zmienną w razie potrzeby!

    $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;