Exibir elipsis antes e depois do fragmento em Solr
Pergunta
Eu tenho Solr configurado para retornar fragmentos com um fragsato de 500.
Às vezes, todo o campo tem 500 caracteres ou menos, portanto o fragmento é idêntico ao campo. Para os campos que são mais longos do que isso, Solr apenas retorna o fragmento sem nenhuma indicação (ou assim parece) de que o fragmento representa apenas parte do conteúdo de um campo. Isso significa que o fragmento pode começar no meio da frase.
Quero deixar claro para os usuários que eles estão olhando para um fragmento e simplesmente exibir elipseis no final e/ou início desse fragmento. Essa funcionalidade é incorporada ao Solr? Caso contrário, como você iria inserir elipsis?
Solução
O que acabei fazendo foi retornar o fragmento e o campo inalterado do qual o fragmento foi criado.
Em seguida, escrevi uma lógica que comparou os dois para determinar se as elipsis devem ser adicionadas ao fragmento e, em caso afirmativo, adicioná -lo antes, depois ou antes e depois do fragmento.
Outras dicas
Solr não retornará um indicador, você está certo.
Defina seu fragsato como 501. Então é um pouco de lógica na sua interface do usuário para determinar se as elipsis devem ser exibidas ou não.
Truque qualquer coisa 501 a 500 e adicione elipsis.
Acabei de lidar com o mesmo problema. A maneira como eu fiz isso é o seguinte:
- Obtenha a corda original
- Obtenha os primeiros e os últimos 10 caracteres da string original
- Obtenha os primeiros e os últimos 10 caracteres do fragmento retornados pela pesquisa do Solr
Compare os dois e preencha uma variável quando necessário!
$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;
Aqui está outra abordagem melhor. Ao criar o índice, adicione um atributo "teaser" que já tem essa lógica já aplicada. Empurre esse esforço para fora de seus pedidos. É exatamente assim que eu faria isso.