[opencms-dev] How can search general in more perspective/multisite?
Schliemann, Kai
K.Schliemann at comundus.com
Tue Oct 7 17:40:55 CEST 2014
Hi Deiverson,
glad, that you found a solution.
I would say most of the magic is the while loop below this comment “//Realizando a iteração de todos os multisites existentes”.
What I do not understand is, what the following line is needed for:
parametros.setParsedQuery("z* OR x* OR c* OR v* OR b* OR n* OR m* OR l* OR k* OR j* OR h* OR g* OR f* OR d* OR s* OR a* OR q* OR w* OR e* OR r* OR t* OR y* OR u* OR i* OR o* OR p*");
Additionally this looks to me like some kind of a performance killer, when this query is really executed with each search request.
But never mind. It works and that is important.
Best regards
Kai
Von: opencms-dev-bounces at opencms.org [mailto:opencms-dev-bounces at opencms.org] Im Auftrag von Deiverson Silveira
Gesendet: Dienstag, 7. Oktober 2014 14:36
An: The OpenCms mailing list
Betreff: Re: [opencms-dev] How can search general in more perspective/multisite?
Hi Kai,
Success with this code, xD... see (sorry comment with portuguese), shared and "viva o software livre":
<%@page import="org.opencms.file.CmsObject"%<mailto:%25 at page%20import=%22org.opencms.file.CmsObject%22%25>>
<%@page import="org.opencms.search.fields.CmsSearchFieldConfiguration"%<mailto:%25 at page%20import=%22org.opencms.search.fields.CmsSearchFieldConfiguration%22%25>>
<%@ page session="true" %>
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@page import="org.opencms.search.CmsSearchManager"%<mailto:%25 at page%20import=%22org.opencms.search.CmsSearchManager%22%25>>
<%@page import="org.opencms.search.CmsSearchParameters"%<mailto:%25 at page%20import=%22org.opencms.search.CmsSearchParameters%22%25>>
<%@page import="org.opencms.main.OpenCms"%<mailto:%25 at page%20import=%22org.opencms.main.OpenCms%22%25>>
<%@page import="java.util.*"%<mailto:%25 at page%20import=%22java.util.*%22%25>>
<%@page import="java.util.ArrayList"%<mailto:%25 at page%20import=%22java.util.ArrayList%22%25>>
<%@page import="org.opencms.jsp.CmsJspActionElement"%<mailto:%25 at page%20import=%22org.opencms.jsp.CmsJspActionElement%22%25>>
<%@page import="org.opencms.search.CmsSearchResult"%<mailto:%25 at page%20import=%22org.opencms.search.CmsSearchResult%22%25>>
<%@page import="org.opencms.search.*"%<mailto:%25 at page%20import=%22org.opencms.search.*%22%25>>
<%
CmsJspActionElement cms = new CmsJspActionElement(pageContext, request, response);
//Criando o Objeto que será alternado via multisites
CmsObject obj = cms.getCmsObject();
//Seta o site do contexto atual para rollback
String siteRollBack = OpenCms.getSiteManager().getDefaultSite().getSiteRoot();
//Setando os parametros de busca
CmsSearchParameters parametros = new CmsSearchParameters();
//Criando uma busca geral
CmsSearch searchGeral = new CmsSearch();
//Setando o indice de busca geral
parametros.setIndex("Offline project EN (VFS)");
//Passando o parametro de consulta, no exemplo abaixo busca por todo o site
parametros.setParsedQuery("z* OR x* OR c* OR v* OR b* OR n* OR m* OR l* OR k* OR j* OR h* OR g* OR f* OR d* OR s* OR a* OR q* OR w* OR e* OR r* OR t* OR y* OR u* OR i* OR o* OR p*");
//Setando resultados por pagina
parametros.setMatchesPerPage(99999);
//Setando os parametros para a busca geral
searchGeral.setParameters(parametros);
//Preparando a lista de Resultados de Busca Geral
List<CmsSearchResult> listaResultado = null;
//Criando a lista de todos os multisites que serão iterados, dinamicamente
Set<String> listaSites = OpenCms.getSiteManager().getSiteRoots();
//Realizando a iteração de todos os multisites existentes
Iterator i = listaSites.iterator();
while(i.hasNext()){
//Nesse momento é identificado um dos sites da lista existente
String multiSite = i.next().toString();
//Definindo o site raiz, referente a outra perspectiva
obj.getRequestContext().setSiteRoot(multiSite);
//Setando o objeto de busca geral com o objeto instanciado anteriormente
searchGeral.init(obj);
//Se for a primeira iteração, o objeto será null ao tentar adicionar a lista de resultados concatenando, portanto foi necessario adicionar o else
//para ser adicionado na primeira iteracao uma lista de resultado
if(listaResultado != null){
listaResultado.addAll(searchGeral.getSearchResult());
}else{
listaResultado = searchGeral.getSearchResult();
}
}
//Setando o site corrente de modo rollBack
obj.getRequestContext().setSiteRoot(siteRollBack);
//Exibindo o resultado da busca geral, que foi agregado de todos os multisites
for(Iterator iterator = listaResultado.iterator(); iterator.hasNext();)
{
CmsSearchResult result = (CmsSearchResult)iterator.next();
out.println(result.getPath() + "<br>");
}
%>
Thank you for Fabian and Kai!
Success!
Deiverson
2014-10-06 14:30 GMT-03:00 Schliemann, Kai <K.Schliemann at comundus.com<mailto:K.Schliemann at comundus.com>>:
Hi Deiverson,
ok, too bad. I used that once in a project to distinguish between folders but within one site. I thought that would work with multi sites too.
Coming back to the index solution.
Is it possible for you to define three indices:
1. Index siteA
2. Index siteB
3. Index global
If someone does a global search (e.g. by ticking a checkbox “global search”) you use that index. Otherwise you are using the site indices.
I think, this would be the easiest solution, if suitable for you.
Another approach, which needs changes in data structure:
Move all your news to the shared site and add categories to your news xsd. Categories would be “siteA”, “siteB”, “global”.
Filter your search results by categories.
Only works, if your just want to search news content.
HTH
Best regards
Kai
Von: opencms-dev-bounces at opencms.org<mailto:opencms-dev-bounces at opencms.org> [mailto:opencms-dev-bounces at opencms.org<mailto:opencms-dev-bounces at opencms.org>] Im Auftrag von Deiverson Silveira
Gesendet: Montag, 6. Oktober 2014 18:45
An: The OpenCms mailing list
Betreff: Re: [opencms-dev] How can search general in more perspective/multisite?
Hi Kai,
I try setSearchRoots but problem with multisites, I dont see other perspective.=/
I can /news/, /faq/, but my search dont see /sites/siteb/othernews/ for exemplo, only one perspective.
I use setSearchRoots in jsp.
Regards,
Deiverson
2014-10-06 11:11 GMT-03:00 Schliemann, Kai <K.Schliemann at comundus.com<mailto:K.Schliemann at comundus.com>>:
Hi Deiverson,
for a global search you probably need this:
/**
* Sets the search root list.<p>
*
* Only resources that are sub-resources of one of the search roots
* are included in the search result.<p>
*
* The search roots set here are used <i>in addition to</i> the current site root
* of the user performing the search.<p>
*
* By default, the search roots contain only one entry with an empty string.<p>
*
* @param searchRoots the search roots to set
*/
public void setSearchRoots(String[] searchRoots) {
List<String> l = new ArrayList<String>(Arrays.asList(searchRoots));
m_parameters.setRoots(l);
resetLastResult();
}
Best regards
Kai
Von: opencms-dev-bounces at opencms.org<mailto:opencms-dev-bounces at opencms.org> [mailto:opencms-dev-bounces at opencms.org<mailto:opencms-dev-bounces at opencms.org>] Im Auftrag von Deiverson Silveira
Gesendet: Montag, 6. Oktober 2014 14:55
An: The OpenCms mailing list
Betreff: Re: [opencms-dev] How can search general in more perspective/multisite?
Hi Kai,
But this way, for a global search on all subsites I would have to instantiate each index and concatenate the results, right?
Regards,
Deiverson
2014-10-06 6:21 GMT-03:00 Schliemann, Kai <K.Schliemann at comundus.com<mailto:K.Schliemann at comundus.com>>:
Hi Deiverson,
if you are using Lucene, you can create an index for each site.
And then set the index in your search JSP.
e.g. like
org.opencms.search.CmsSearch.setIndex(indexName);
AFAIK OpenCms provides a property “search.index”. You could use that to read the index you need. Or set it hard coded in your template, depending on the site you are in (not recommended).
HTH
Best regards
Kai
Von: opencms-dev-bounces at opencms.org<mailto:opencms-dev-bounces at opencms.org> [mailto:opencms-dev-bounces at opencms.org<mailto:opencms-dev-bounces at opencms.org>] Im Auftrag von Deiverson Silveira
Gesendet: Freitag, 3. Oktober 2014 20:54
An: The OpenCms mailing list
Betreff: Re: [opencms-dev] How can search general in more perspective/multisite?
Hi Fabian,
Thank you for attention.
I don't use Solr, you know how can make this using Lucene? I use traditional Lucene, I think this case is already a good opportunity to use Solr and leave the Lucene.
I try set my object with project "/" but entry conflit in mysite because perspective:
CmsObject cmsObject = cms.getCmsObject();
CmsProject cmsproject = cmsObject.readProject("Offline");
cmsObject.getRequestContext().setCurrentProject(cmsproject);
cmsObject.getRequestContext().setSiteRoot("/");
and:
search.init(cmsproject);
Regards,
Deiverson
2014-10-01 8:57 GMT-03:00 fhsubscriptions at componio.net<mailto:fhsubscriptions at componio.net> <fhsubscriptions at componio.net<mailto:fhsubscriptions at componio.net>>:
Hi Deiverson,
you can set the "parent sites" in the Solr query to enable search across different sites.
Regards,
\Fabian
Am 01.10.2014 13:24, schrieb Deiverson Silveira:
Hi List,
I have problem.
I have multisites, and I have search general, I need search /sites/siteA/news/ and /sites/siteB/news/.
I stay perspective /sites/siteA/, dont see /sites/siteB/
My search don´t work because perspective, how can solved this problem?
I need help,
Regards,
Deiverson
--
www.solutioncms.com<http://www.solutioncms.com>
The Brazilian
Official Provider OpenCms
_______________________________________________
This mail is sent to you from the opencms-dev mailing list
To change your list options, or to unsubscribe from the list, please visit
http://lists.opencms.org/cgi-bin/mailman/listinfo/opencms-dev
_______________________________________________
This mail is sent to you from the opencms-dev mailing list
To change your list options, or to unsubscribe from the list, please visit
http://lists.opencms.org/cgi-bin/mailman/listinfo/opencms-dev
--
www.solutioncms.com<http://www.solutioncms.com>
The Brazilian
Official Provider OpenCms
_______________________________________________
This mail is sent to you from the opencms-dev mailing list
To change your list options, or to unsubscribe from the list, please visit
http://lists.opencms.org/cgi-bin/mailman/listinfo/opencms-dev
--
www.solutioncms.com<http://www.solutioncms.com>
The Brazilian
Official Provider OpenCms
_______________________________________________
This mail is sent to you from the opencms-dev mailing list
To change your list options, or to unsubscribe from the list, please visit
http://lists.opencms.org/cgi-bin/mailman/listinfo/opencms-dev
--
www.solutioncms.com<http://www.solutioncms.com>
The Brazilian
Official Provider OpenCms
_______________________________________________
This mail is sent to you from the opencms-dev mailing list
To change your list options, or to unsubscribe from the list, please visit
http://lists.opencms.org/cgi-bin/mailman/listinfo/opencms-dev
--
www.solutioncms.com<http://www.solutioncms.com>
The Brazilian
Official Provider OpenCms
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://webmail.opencms.org/pipermail/opencms-dev/attachments/20141007/fc464733/attachment.htm>
More information about the opencms-dev
mailing list