List of usage examples for com.liferay.portal.kernel.search SearchContext getFacets
public Map<String, Facet> getFacets()
From source file:com.rivetlogic.portal.search.elasticsearch.util.ElasticsearchHelper.java
License:Open Source License
/** * This method adds multiple facets to Elastic search query builder. * * @param searchContext the search context * @param searchRequestBuilder the search request builder *//*from w w w . j a va2 s . co m*/ private void handleFacetQueries(SearchContext searchContext, SearchRequestBuilder searchRequestBuilder) { Map<String, Facet> facets = searchContext.getFacets(); for (Facet facet : facets.values()) { if (!facet.isStatic()) { FacetConfiguration liferayFacetConfiguration = facet.getFacetConfiguration(); JSONObject liferayFacetDataJSONObject = liferayFacetConfiguration.getData(); if (facet instanceof MultiValueFacet) { TermsFacetBuilder termsFacetBuilder = FacetBuilders .termsFacet(liferayFacetConfiguration.getFieldName()); termsFacetBuilder.field(liferayFacetConfiguration.getFieldName()); if (liferayFacetDataJSONObject.has(ElasticsearchIndexerConstants.ELASTIC_SEARCH_MAXTERMS)) { termsFacetBuilder.size(liferayFacetDataJSONObject .getInt(ElasticsearchIndexerConstants.ELASTIC_SEARCH_MAXTERMS)); } searchRequestBuilder.addFacet(termsFacetBuilder); } else if (facet instanceof RangeFacet) { RangeFacetBuilder rangeFacetBuilder = FacetBuilders .rangeFacet(liferayFacetConfiguration.getFieldName()); /** *A typical ranges array looks like below. *[{"range":"[20140603200000 TO 20140603220000]","label":"past-hour"},{"range":"[20140602210000 TO 20140603220000]","label":"past-24-hours"},...] * */ JSONArray rangesJSONArray = liferayFacetDataJSONObject .getJSONArray(ElasticsearchIndexerConstants.ELASTIC_SEARCH_RANGES); rangeFacetBuilder.field(ElasticsearchIndexerConstants.ELASTIC_SEARCH_INNERFIELD_MDATE); if (rangesJSONArray != null) { for (int i = 0; i < rangesJSONArray.length(); i++) { JSONObject rangeJSONObject = rangesJSONArray.getJSONObject(i); String[] fromTovalues = fetchFromToValuesInRage(rangeJSONObject); if (fromTovalues != null) { rangeFacetBuilder.addRange(fromTovalues[0].trim(), fromTovalues[1].trim()); } } } searchRequestBuilder.addFacet(rangeFacetBuilder); } } } }
From source file:com.rivetlogic.portal.search.elasticsearch.util.ElasticsearchHelper.java
License:Open Source License
/** * This method converts the Elastic search facet results to Liferay facet collector. * * @param searchContext the search context * @param response the response//from w w w.java 2s . c o m */ private void collectFacetResults(SearchContext searchContext, SearchResponse response) { for (Entry<String, Facet> facetEntry : searchContext.getFacets().entrySet()) { Facet liferayFacet = facetEntry.getValue(); if (!liferayFacet.isStatic()) { org.elasticsearch.search.facet.Facet esFacet = response.getFacets().facet(facetEntry.getKey()); if (esFacet != null) { FacetCollector facetCollector = null; Map<String, Integer> facetResults = null; /** * AssetEntries consist of Fully qualified class names, since the classnames are * case insensitive and at the same time ES facet result terms are returned in * lowercase, we need to handle this case differently. While creating the Facet * collectors, the terms (in this case Entryclassnames) are obtained from Liferay * facet configuration. * E.g:com.liferay.portlet.messageboards.model.MBThread would be converted to * com.liferay.portlet.messageboards.model.mbmessage in ES server facet result */ if ((liferayFacet instanceof AssetEntriesFacet)) { if (_log.isDebugEnabled()) { _log.debug("Handling AssetEntriesFacet now for field:" + facetEntry.getKey() + "..."); } Map<String, Integer> esTermsFacetResults = parseESFacet(esFacet); facetResults = new HashMap<String, Integer>(); for (String entryClassname : fetchEntryClassnames(liferayFacet)) { if (esTermsFacetResults.get(entryClassname.toLowerCase()) != null) { facetResults.put(entryClassname, esTermsFacetResults.get(entryClassname.toLowerCase())); } else { facetResults.put(entryClassname, new Integer(0)); } if (_log.isDebugEnabled()) { _log.debug("AssetEntriesFacet>>>>>>>>>>>>Term:" + entryClassname + " <<<<Count:" + esTermsFacetResults.get(entryClassname.toLowerCase())); } } } else if ((liferayFacet instanceof MultiValueFacet)) { facetResults = new HashMap<String, Integer>(); TermsFacet esTermsFacetResults = (TermsFacet) esFacet; for (TermsFacet.Entry entry : esTermsFacetResults) { facetResults.put(entry.getTerm().string(), entry.getCount()); if (_log.isDebugEnabled()) { _log.debug("MultiValueFacet>>>>>>>>>>>>Term:" + entry.getTerm().string() + " <<<<Count:" + entry.getCount()); } } } else if ((liferayFacet instanceof RangeFacet)) { facetResults = new HashMap<String, Integer>(); org.elasticsearch.search.facet.range.RangeFacet esRangeFacetResults = (org.elasticsearch.search.facet.range.RangeFacet) esFacet; for (org.elasticsearch.search.facet.range.RangeFacet.Entry entry : esRangeFacetResults) { facetResults.put(buildRangeTerm(entry), new Integer((int) entry.getCount())); if (_log.isDebugEnabled()) { _log.debug(">>>>>>>From:" + entry.getFromAsString() + ">>>>>>>To:" + entry.getToAsString() + ">>>>>>>Count:" + entry.getCount()); } } } facetCollector = new ElasticsearchQueryFacetCollector(facetEntry.getKey(), facetResults); liferayFacet.setFacetCollector(facetCollector); if (_log.isDebugEnabled()) { _log.debug("Facet collector successfully set for field:" + facetEntry.getKey() + "..."); } } } } }
From source file:com.rknowsys.portal.search.elastic.ElasticsearchIndexSearcher.java
License:Open Source License
protected void updateFacetCollectors(SearchContext searchContext, SearchResponse searchResponse) { Map<String, Facet> facetsMap = searchContext.getFacets(); for (Facet facet : facetsMap.values()) { if (facet.isStatic()) { continue; }//from w ww . j a v a 2 s .c o m Aggregations facets = searchResponse.getAggregations(); Aggregation elasticsearchFacet = facets.get(facet.getFieldName()); FacetCollector facetCollector = new ElasticsearchFacetFieldCollector(elasticsearchFacet); facet.setFacetCollector(facetCollector); } }
From source file:com.rknowsys.portal.search.elastic.ElasticsearchIndexSearcher.java
License:Open Source License
private void addFacetCollectorsToSearch(SearchContext searchContext, SearchRequestBuilder searchRequestBuilder) { Map<String, Facet> facets = searchContext.getFacets(); for (Facet facet : facets.values()) { AggregationBuilder facetBuilder = null; if (facet instanceof MultiValueFacet) { facetBuilder = LiferayFacetParser.getFacetBuilder((MultiValueFacet) facet); } else if (facet instanceof RangeFacet) { facetBuilder = LiferayFacetParser.getFacetBuilder((RangeFacet) facet); }/*www .j a v a 2 s .c o m*/ if (facetBuilder != null) { searchRequestBuilder.addAggregation(facetBuilder); } } }
From source file:org.rsc.liferay.solr.SolrIndexSearcher.java
License:Open Source License
protected Hits doSearch(SearchContext searchContext, Query query) throws Exception { SolrQuery solrQuery = translateQuery(searchContext.getCompanyId(), query, searchContext.getSorts(), searchContext.getStart(), searchContext.getEnd()); Map<String, Facet> facets = searchContext.getFacets(); for (Facet facet : facets.values()) { if (facet.isStatic()) { continue; }//w w w .j a v a 2 s. co m FacetConfiguration facetConfiguration = facet.getFacetConfiguration(); if (facet instanceof RangeFacet) { solrQuery.addFacetField(facetConfiguration.getFieldName()); JSONObject dataJSONObject = facetConfiguration.getData(); JSONArray rangesJSONArray = dataJSONObject.getJSONArray("ranges"); if (rangesJSONArray == null) { continue; } for (int i = 0; i < rangesJSONArray.length(); i++) { JSONObject rangeJSONObject = rangesJSONArray.getJSONObject(i); String range = rangeJSONObject.getString("range"); String facetQuery = facetConfiguration.getFieldName() + StringPool.COLON + range; solrQuery.addFacetQuery(facetQuery); } } else { solrQuery.addFacetField(facetConfiguration.getFieldName()); } String facetSort = FacetParams.FACET_SORT_COUNT; String order = facetConfiguration.getOrder(); if (order.equals("OrderValueAsc")) { facetSort = FacetParams.FACET_SORT_INDEX; } solrQuery.add("f." + facetConfiguration.getFieldName() + ".facet.sort", facetSort); } solrQuery.setFacetLimit(-1); QueryResponse queryResponse = _solrServer.query(solrQuery, METHOD.POST); boolean allResults = false; if (solrQuery.getRows() == 0) { allResults = true; } List<FacetField> facetFields = queryResponse.getFacetFields(); if (facetFields != null) { for (FacetField facetField : facetFields) { Facet facet = facets.get(facetField.getName()); FacetCollector facetCollector = null; if (facet instanceof RangeFacet) { facetCollector = new SolrFacetQueryCollector(facetField.getName(), queryResponse.getFacetQuery()); } else { facetCollector = new SolrFacetFieldCollector(facetField.getName(), facetField); } facet.setFacetCollector(facetCollector); } } return subset(solrQuery, query, query.getQueryConfig(), queryResponse, allResults); }