Example usage for com.liferay.portal.kernel.search.facet Facet isStatic

List of usage examples for com.liferay.portal.kernel.search.facet Facet isStatic

Introduction

In this page you can find the example usage for com.liferay.portal.kernel.search.facet Facet isStatic.

Prototype

public boolean isStatic();

Source Link

Usage

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  ww  w. j av  a  2s.c om*/
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  .  j  a va  2  s.com
 */
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   ww w  .  j  ava  2  s.  c om

        Aggregations facets = searchResponse.getAggregations();

        Aggregation elasticsearchFacet = facets.get(facet.getFieldName());

        FacetCollector facetCollector = new ElasticsearchFacetFieldCollector(elasticsearchFacet);

        facet.setFacetCollector(facetCollector);
    }

}

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;
        }/* ww w .  ja v a  2s.c o  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);
}