Inicio de mvnForum


Imprimir en 28-may-2023 20:37:06

Publicado por RobertoMS en 23-nov-2012 7:44:12
Re: Busqueda con solr en opencms 8.5
Buenos días Cristina. Te copio un trozo de mi wiki personal donde tengo mis apuntes sobre solr en OpenCms 8.5.

------------

Una query en solr tiene el siguiente formato:

fq=category_exact:location/europe/&fq=type:v8event

Si enviamos ese parámetro en una variable "query" podríamos cargar todos los resultados de la búsqueda de solr mediante el siguiente código.

<c:set var="query" value="${param.query}" />
<c:if test="${!empty query}">
<cms:resourceload collector="byQuery" param="${query}" preload="true">
<cms:contentinfo var="info" />
<c:if test="${info.resultSize > 0}">
<h4><fmt:message key="v8.solr.results" /></h4>
<div class="boxbody">
<cms:resourceload>
<cms:resourceaccess var="res" />
<c:set var="resource" value="${res.resource}" />
<c:set var="typeId" value="${resource.typeId}" />
<c:set var="typeName"><%= OpenCms.getResourceManager().getResourceType(pageContext.getAttributesScope("typeId")).getTypeName() %></c:set>
<div class="boxbody_listentry">
<div class="twocols">
<div><strong>${res.readProperties['Title']}</strong> [ <fmt:message key="v8.solr.type" />: ${typeName}, <fmt:message key="v8.solr.modified" />: <fmt:formatDate value="${cms:convertDate(resource.dateLastModified)}" dateStyle="SHORT" timeStyle="SHORT" type="both" />, <fmt:message key="v8.solr.size" />: ${res.file.length} Bytes ]</div>
<div><strong><fmt:message key="v8.solr.path" />:</strong> ${resource.rootPath}</div>
</div>
</div>
</cms:resourceload>
</div>
</c:if>
</cms:resourceload>
</c:if>

Si necesitamos cargar los datos desde un cms:contentload pasamos a tener una estructura diferente. Para empezar la query a lanzar sería la siguiente:

q=category_exact:municipios/cadiz/ AND type:sidocumento

Para cargar los contenidos ya no usaríamos resourceload, sino el más convencional contentload. Un ejemplo sería el siguiente:

<cms:contentload collector="byQuery" param="<%=query%>">
<cms:contentinfo var="info" scope="page" />
<c:if test="${info.resultSize > 0}">
<div class="documento">
<cms:contentaccess var="resource" />
<div class="documento_contenido">
<div class="documento_titulo">
<h3><a href="<cms:link>${resource.filename}</cms:link>">${resource.value.Titulo}</a></h3>
</div>
<div class="documento_descripcion">
<c:set var="_texto">${resource.value.Descripcion}</c:set>
<%
String texto = (String)pageContext.getAttribute("_texto");
boolean recortar=false;
int cont = 300;
if(texto.replaceAll("\\<.*?\\>", "").length()>cont){
texto = texto.replaceAll("\\<.*?\\>", "");
while(texto.charAt(cont) != ' ' && texto.charAt(cont) != '.')
cont++;
texto = texto.substring(0, cont);
recortar = true;
}
%>
<p><%=texto%><% if(recortar){%><a href="<cms:link>${resource.filename}</cms:link>">[...]</a><%}%></p>
</div>
</div>
<div class="documento_enlace_bottom"><a href="<cms:link>${resource.value.Documento}</cms:link>">Descargar: ${resource.value.Titulo}</a></div>
</div>
</c:if>
</cms:contentload>

---------------------------

En ambos ejemplos he creado una variable query. En el primer ejemplo se construye así:
<%
String query = "fq=category_exact:location/europe/&fq=type:v8event";
%>

Si necesitas más información sobre solr trataré de echarte un cable. Estoy aún un poco verde en esta parte pero trataré de ser de ayuda wink