2010-08-03 11 views
6

tengo SOLR configurado para devolver fragmentos con un fragsize de 500.Display puntos suspensivos antes y después de fragmento en SOLR

veces, todo el campo es de 500 caracteres o menos, por lo que el fragmento es idéntico al campo. Para los campos que son más largos que eso, SOLR simplemente devuelve el fragmento sin ninguna indicación (o eso parece) de que el fragmento solo representa parte del contenido de un campo. Eso significa que el fragmento podría comenzar a mitad de la oración.

Quiero dejar en claro a los usuarios que están viendo un fragmento y simplemente mostrar puntos suspensivos al final y/o el inicio de dicho fragmento. ¿Esa funcionalidad está integrada en SOLR? Si no, ¿cómo vas a insertar puntos suspensivos?

Respuesta

1

Lo que terminé haciendo fue devolver tanto el fragmento como el campo inalterado del cual se creó el fragmento.

Luego escribí algunas lógicas que comparaban las dos para determinar si se debían agregar puntos suspensivos al fragmento y, de ser así, si agregarlo antes, después o antes y después del fragmento.

+0

Eso es lo que hice, también :) +1 –

+0

Yo, también :) Crear una tarea de mejora: https://issues.apache.org/jira/browse/SOLR-9271 – cuh

0

Solr no devolverá un indicador, tiene usted razón.

Establezca su fragsize en 501. Luego hay un poco de lógica en su UI para determinar si los puntos suspensivos deben mostrarse o no.

Truncar cualquier cosa 501 a 500 y agregar puntos suspensivos.

+0

Sí, yo sólo esperaba que no hay una manera integrada para hacer eso. Además, eso todavía me deja el problema de no saber si mostrar los puntos suspensivos al principio o al final del fragmento (o ambos). – Stefan

-1

Aquí hay otro enfoque mejor. Al crear el índice, agregue un atributo "reclamo" que ya tenga aplicada esta lógica. Elimine ese esfuerzo de sus solicitudes por completo. Así es exactamente como haría esto.

+1

En tiempo de indexación, no se sabe qué parte del campo coincide y, por lo tanto, cuál será el fragmento. – Stefan

0

Acabo de resolver el mismo problema. La forma en que fui a hacer esto es el siguiente:

  1. Consigue la cadena original
  2. obtener tanto los primeros y últimos 10 caracteres de la cadena original
  3. obtener tanto los primeros y últimos 10 caracteres del fragmento devuelto por la búsqueda de Solr
  4. Compare ambos y complete una variable cuando sea necesario.

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