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

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

Introduction

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

Prototype

public FacetConfiguration getFacetConfiguration();

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  www  . ja  v  a2s . 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

/**
 * Fetch entry classnames.// w w w .  j  a v a 2s .  co  m
 *
 * @param liferayFacet the liferay facet
 * @return the sets the
 */
private Set<String> fetchEntryClassnames(Facet liferayFacet) {
    JSONObject dataJSONObject = liferayFacet.getFacetConfiguration().getData();
    JSONArray valuesArray = dataJSONObject.getJSONArray(ElasticsearchIndexerConstants.ELASTIC_SEARCH_VALUES);
    Set<String> entryClassnames = new HashSet<String>();
    if (valuesArray != null) {
        for (int z = 0; z < valuesArray.length(); z++) {
            entryClassnames.add(valuesArray.getString(z));
        }
    }
    return entryClassnames;
}

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