Example usage for com.liferay.portal.kernel.search SearchContext getEnd

List of usage examples for com.liferay.portal.kernel.search SearchContext getEnd

Introduction

In this page you can find the example usage for com.liferay.portal.kernel.search SearchContext getEnd.

Prototype

public int getEnd() 

Source Link

Usage

From source file:com.liferay.document.library.repository.cmis.internal.CMISRepository.java

License:Open Source License

protected Hits doSearch(SearchContext searchContext, Query query) throws Exception {

    long startTime = System.currentTimeMillis();

    Session session = getSession();/*from  w  w  w  . ja  va2 s  .  c o  m*/

    RepositoryInfo repositoryInfo = session.getRepositoryInfo();

    RepositoryCapabilities repositoryCapabilities = repositoryInfo.getCapabilities();

    QueryConfig queryConfig = searchContext.getQueryConfig();

    CapabilityQuery capabilityQuery = repositoryCapabilities.getQueryCapability();

    queryConfig.setAttribute("capabilityQuery", capabilityQuery.value());

    String productName = repositoryInfo.getProductName();
    String productVersion = repositoryInfo.getProductVersion();

    queryConfig.setAttribute("repositoryProductName", productName);
    queryConfig.setAttribute("repositoryProductVersion", productVersion);

    String queryString = _cmisSearchQueryBuilder.buildQuery(searchContext, query);

    if (_cmisRepositoryDetector.isNuxeo5_4()) {
        queryString += " AND (" + PropertyIds.IS_LATEST_VERSION + " = true)";
    }

    if (_log.isDebugEnabled()) {
        _log.debug("CMIS search query: " + queryString);
    }

    boolean searchAllVersions = _cmisRepositoryDetector.isNuxeo5_5OrHigher();

    ItemIterable<QueryResult> queryResults = session.query(queryString, searchAllVersions);

    int start = searchContext.getStart();
    int end = searchContext.getEnd();

    if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS)) {
        start = 0;
    }

    int total = 0;

    List<com.liferay.portal.kernel.search.Document> documents = new ArrayList<>();
    List<String> snippets = new ArrayList<>();
    List<Float> scores = new ArrayList<>();

    for (QueryResult queryResult : queryResults) {
        total++;

        if (total <= start) {
            continue;
        }

        if ((total > end) && (end != QueryUtil.ALL_POS)) {
            continue;
        }

        com.liferay.portal.kernel.search.Document document = new DocumentImpl();

        String objectId = queryResult.getPropertyValueByQueryName(PropertyIds.OBJECT_ID);

        if (_log.isDebugEnabled()) {
            _log.debug("Search result object ID " + objectId);
        }

        FileEntry fileEntry = null;

        try {
            fileEntry = toFileEntry(objectId, true);
        } catch (Exception e) {
            if (_log.isDebugEnabled()) {
                Throwable cause = e.getCause();

                if (cause != null) {
                    cause = cause.getCause();
                }

                if (cause instanceof CmisObjectNotFoundException) {
                    _log.debug("Search result ignored for CMIS document which "
                            + "has a version with an invalid object ID " + cause.getMessage());
                } else {
                    _log.debug("Search result ignored for invalid object ID", e);
                }
            }

            total--;

            continue;
        }

        DocumentHelper documentHelper = new DocumentHelper(document);

        documentHelper.setEntryKey(fileEntry.getModelClassName(), fileEntry.getFileEntryId());

        document.addKeyword(Field.TITLE, fileEntry.getTitle());

        documents.add(document);

        if (queryConfig.isScoreEnabled()) {
            Object scoreObj = queryResult.getPropertyValueByQueryName("HITS");

            if (scoreObj != null) {
                scores.add(Float.valueOf(scoreObj.toString()));
            } else {
                scores.add(1.0F);
            }
        } else {
            scores.add(1.0F);
        }

        snippets.add(StringPool.BLANK);
    }

    float searchTime = (float) (System.currentTimeMillis() - startTime) / Time.SECOND;

    Hits hits = new HitsImpl();

    hits.setDocs(documents.toArray(new com.liferay.portal.kernel.search.Document[documents.size()]));
    hits.setLength(total);
    hits.setQuery(query);
    hits.setQueryTerms(new String[0]);
    hits.setScores(ArrayUtil.toFloatArray(scores));
    hits.setSearchTime(searchTime);
    hits.setSnippets(snippets.toArray(new String[snippets.size()]));
    hits.setStart(startTime);

    return hits;
}

From source file:com.rivetlogic.portal.search.elasticsearch.util.ElasticsearchHelper.java

License:Open Source License

/**
 * Gets the search hits./*ww  w  .  java2  s  . c  o  m*/
 *
 * @param searchContext the search context
 * @param query the query
 * @return the search hits
 */
public Hits getSearchHits(SearchContext searchContext, Query query) {
    if (_log.isInfoEnabled()) {
        _log.info("Search against Elasticsearch with SearchContext");
    }
    Hits hits = new HitsImpl();
    hits.setStart(new Date().getTime());

    Client client = this._esConnector.getClient();

    String keywords = searchContext.getKeywords();
    SearchRequestBuilder searchRequestBuilder = client
            .prepareSearch(ElasticsearchIndexerConstants.ELASTIC_SEARCH_LIFERAY_INDEX)
            .setQuery(_esQueryBuilder.doSearch(query));

    // Handle Search Facet queries
    handleFacetQueries(searchContext, searchRequestBuilder);
    SearchResponse response = null;
    if (getSort(searchContext.getSorts()) != null) {
        searchRequestBuilder = searchRequestBuilder.setFrom(searchContext.getStart())
                .setSize(searchContext.getEnd()).addSort(getSort(searchContext.getSorts()));
    } else {
        searchRequestBuilder = searchRequestBuilder.setFrom(searchContext.getStart())
                .setSize(searchContext.getEnd());
    }
    response = searchRequestBuilder.execute().actionGet();
    collectFacetResults(searchContext, response);

    SearchHits searchHits = response.getHits();
    hits.setDocs(getDocuments(searchHits, searchContext));
    hits.setScores(getScores(searchHits));
    hits.setSearchTime((float) (System.currentTimeMillis() - hits.getStart()) / Time.SECOND);
    hits.setQuery(query);
    if (keywords != null) {
        hits.setQueryTerms(keywords.split(StringPool.SPACE));
    }
    hits.setLength((int) searchHits.getTotalHits());
    hits.setStart(hits.getStart());

    return hits;
}

From source file:com.rknowsys.portal.search.elastic.ElasticsearchIndexSearcher.java

License:Open Source License

@Override
public Hits search(SearchContext searchContext, Query query) throws SearchException {
    try {//  ww  w  .j  ava 2 s  .c o m
        int end = searchContext.getEnd();
        int start = searchContext.getStart();
        if (isFilterSearch(searchContext)) {
            if (end > INDEX_FILTER_SEARCH_LIMIT) {
                end = end - INDEX_FILTER_SEARCH_LIMIT + 5;
            }
            if ((start < 0) || (start > end) || end < 0) {
                return new HitsImpl();
            }
        }
        query = getPermissionQuery(searchContext, query);

        return doSearch(searchContext, query, start, end);
    } catch (Exception e) {
        throw new SearchException(e);
    }
}

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 w ww.j a  v a 2  s .  c  om*/

        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);
}