Search in sources :

Example 1 with SearchRequest

use of com.shopizer.search.services.SearchRequest in project shopizer by shopizer-ecommerce.

the class SearchServiceImpl method search.

public com.salesmanager.core.model.search.SearchResponse search(MerchantStore store, String languageCode, String term, int entriesCount, int startIndex) throws ServiceException {
    try {
        StringBuilder collectionName = new StringBuilder();
        collectionName.append(PRODUCT_INDEX_NAME).append(UNDERSCORE).append(languageCode).append(UNDERSCORE).append(store.getCode().toLowerCase());
        SearchRequest request = new SearchRequest();
        request.addCollection(collectionName.toString());
        request.setSize(entriesCount);
        request.setStart(startIndex);
        request.setMatch(term);
        SearchResponse response = searchService.search(request);
        com.salesmanager.core.model.search.SearchResponse resp = new com.salesmanager.core.model.search.SearchResponse();
        resp.setTotalCount(0);
        if (response != null) {
            resp.setTotalCount(response.getCount());
            List<SearchEntry> entries = new ArrayList<SearchEntry>();
            Collection<SearchHit> hits = response.getSearchHits();
            if (!CollectionUtils.isEmpty(hits)) {
                for (SearchHit hit : hits) {
                    SearchEntry entry = new SearchEntry();
                    // Map<String,Object> metaEntries = hit.getMetaEntries();
                    Map<String, Object> metaEntries = hit.getItem();
                    IndexProduct indexProduct = new IndexProduct();
                    Object desc = metaEntries.get("description");
                    if (desc instanceof JsonNull == false) {
                        indexProduct.setDescription((String) metaEntries.get("description"));
                    }
                    Object hl = metaEntries.get("highlight");
                    if (hl instanceof JsonNull == false) {
                        indexProduct.setHighlight((String) metaEntries.get("highlight"));
                    }
                    indexProduct.setId((String) metaEntries.get("id"));
                    indexProduct.setLang((String) metaEntries.get("lang"));
                    Object nm = metaEntries.get("name");
                    if (nm instanceof JsonNull == false) {
                        indexProduct.setName(((String) metaEntries.get("name")));
                    }
                    Object mf = metaEntries.get("manufacturer");
                    if (mf instanceof JsonNull == false) {
                        indexProduct.setManufacturer(((String) metaEntries.get("manufacturer")));
                    }
                    indexProduct.setPrice(Double.valueOf(((String) metaEntries.get("price"))));
                    indexProduct.setStore(((String) metaEntries.get("store")));
                    entry.setIndexProduct(indexProduct);
                    entries.add(entry);
                /**
                 * no more support for highlighted
                 */
                }
                resp.setEntries(entries);
                // Map<String,List<FacetEntry>> facets = response.getFacets();
                Map<String, Facet> facets = response.getFacets();
                if (facets != null && facets.size() > 0) {
                    Map<String, List<SearchFacet>> searchFacets = new HashMap<String, List<SearchFacet>>();
                    for (String key : facets.keySet()) {
                        Facet f = facets.get(key);
                        List<com.shopizer.search.services.Entry> ent = f.getEntries();
                        // List<FacetEntry> f = facets.get(key);
                        List<SearchFacet> fs = searchFacets.computeIfAbsent(key, k -> new ArrayList<>());
                        for (com.shopizer.search.services.Entry facetEntry : ent) {
                            SearchFacet searchFacet = new SearchFacet();
                            searchFacet.setKey(facetEntry.getName());
                            searchFacet.setName(facetEntry.getName());
                            searchFacet.setCount(facetEntry.getCount());
                            fs.add(searchFacet);
                        }
                    }
                    resp.setFacets(searchFacets);
                }
            }
        }
        return resp;
    } catch (Exception e) {
        LOGGER.error("Error while searching keywords " + term, e);
        throw new ServiceException(e);
    }
}
Also used : SearchRequest(com.shopizer.search.services.SearchRequest) SearchHit(com.shopizer.search.services.SearchHit) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) JsonNull(com.google.gson.JsonNull) SearchEntry(com.salesmanager.core.model.search.SearchEntry) SearchFacet(com.salesmanager.core.model.search.SearchFacet) ArrayList(java.util.ArrayList) List(java.util.List) SearchEntry(com.salesmanager.core.model.search.SearchEntry) SearchFacet(com.salesmanager.core.model.search.SearchFacet) Facet(com.shopizer.search.services.Facet) IndexProduct(com.salesmanager.core.model.search.IndexProduct) ServiceException(com.salesmanager.core.business.exception.ServiceException) SearchResponse(com.shopizer.search.services.SearchResponse) ServiceException(com.salesmanager.core.business.exception.ServiceException)

Aggregations

JsonNull (com.google.gson.JsonNull)1 ServiceException (com.salesmanager.core.business.exception.ServiceException)1 IndexProduct (com.salesmanager.core.model.search.IndexProduct)1 SearchEntry (com.salesmanager.core.model.search.SearchEntry)1 SearchFacet (com.salesmanager.core.model.search.SearchFacet)1 Facet (com.shopizer.search.services.Facet)1 SearchHit (com.shopizer.search.services.SearchHit)1 SearchRequest (com.shopizer.search.services.SearchRequest)1 SearchResponse (com.shopizer.search.services.SearchResponse)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1