Search in sources :

Example 1 with SearchFacet

use of com.salesmanager.core.model.search.SearchFacet 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)

Example 2 with SearchFacet

use of com.salesmanager.core.model.search.SearchFacet in project shopizer by shopizer-ecommerce.

the class SearchFacadeImpl method convertToSearchProductList.

@Override
public SearchProductList convertToSearchProductList(SearchResponse searchResponse, MerchantStore merchantStore, int start, int count, Language language) {
    SearchProductList returnList = new SearchProductList();
    List<SearchEntry> entries = searchResponse.getEntries();
    if (CollectionUtils.isNotEmpty(entries)) {
        List<Long> ids = entries.stream().map(SearchEntry::getIndexProduct).map(IndexProduct::getId).map(Long::parseLong).collect(Collectors.toList());
        ProductCriteria searchCriteria = new ProductCriteria();
        searchCriteria.setMaxCount(count);
        searchCriteria.setStartIndex(start);
        searchCriteria.setProductIds(ids);
        searchCriteria.setAvailable(true);
        ProductList productList = productService.listByStore(merchantStore, language, searchCriteria);
        List<ReadableProduct> readableProducts = productList.getProducts().stream().map(product -> convertProductToReadableProduct(product, merchantStore, language)).collect(Collectors.toList());
        returnList.getProducts().addAll(readableProducts);
        returnList.setProductCount(productList.getProducts().size());
    }
    // Facets
    Map<String, List<SearchFacet>> facets = Optional.ofNullable(searchResponse.getFacets()).orElse(Collections.emptyMap());
    List<ReadableCategory> categoryProxies = getCategoryFacets(merchantStore, language, facets);
    returnList.setCategoryFacets(categoryProxies);
    List<SearchFacet> manufacturersFacets = facets.entrySet().stream().filter(e -> MANUFACTURER_FACET_NAME.equals(e.getKey())).findFirst().map(Entry::getValue).orElse(Collections.emptyList());
    if (CollectionUtils.isNotEmpty(manufacturersFacets)) {
    // TODO add manufacturer facets
    }
    return returnList;
}
Also used : ProductService(com.salesmanager.core.business.services.catalog.product.ProductService) Async(org.springframework.scheduling.annotation.Async) LoggerFactory(org.slf4j.LoggerFactory) AutoCompleteRequest(com.salesmanager.shop.store.model.search.AutoCompleteRequest) CollectionUtils(org.apache.commons.collections4.CollectionUtils) ServiceException(com.salesmanager.core.business.exception.ServiceException) Inject(javax.inject.Inject) Language(com.salesmanager.core.model.reference.language.Language) MerchantStore(com.salesmanager.core.model.merchant.MerchantStore) ConversionRuntimeException(com.salesmanager.shop.store.api.exception.ConversionRuntimeException) Service(org.springframework.stereotype.Service) Map(java.util.Map) Qualifier(org.springframework.beans.factory.annotation.Qualifier) PricingService(com.salesmanager.core.business.services.catalog.product.PricingService) ReadableCategoryPopulator(com.salesmanager.shop.populator.catalog.ReadableCategoryPopulator) CategoryService(com.salesmanager.core.business.services.catalog.category.CategoryService) SearchKeywords(com.salesmanager.core.model.search.SearchKeywords) SearchProductRequest(com.salesmanager.shop.model.catalog.SearchProductRequest) SearchFacet(com.salesmanager.core.model.search.SearchFacet) ReadableProduct(com.salesmanager.shop.model.catalog.product.ReadableProduct) Product(com.salesmanager.core.model.catalog.product.Product) ProductCriteria(com.salesmanager.core.model.catalog.product.ProductCriteria) Logger(org.slf4j.Logger) SearchService(com.salesmanager.core.business.services.search.SearchService) ImageFilePath(com.salesmanager.shop.utils.ImageFilePath) ProductList(com.salesmanager.core.model.catalog.product.ProductList) Collectors(java.util.stream.Collectors) SearchEntry(com.salesmanager.core.model.search.SearchEntry) Category(com.salesmanager.core.model.catalog.category.Category) List(java.util.List) ValueList(com.salesmanager.shop.model.entity.ValueList) CoreConfiguration(com.salesmanager.core.business.utils.CoreConfiguration) ReadableProductPopulator(com.salesmanager.shop.populator.catalog.ReadableProductPopulator) ServiceRuntimeException(com.salesmanager.shop.store.api.exception.ServiceRuntimeException) SearchProductList(com.salesmanager.shop.model.catalog.SearchProductList) ReadableCategory(com.salesmanager.shop.model.catalog.category.ReadableCategory) Entry(java.util.Map.Entry) SearchResponse(com.salesmanager.core.model.search.SearchResponse) Optional(java.util.Optional) ConversionException(com.salesmanager.core.business.exception.ConversionException) Collections(java.util.Collections) IndexProduct(com.salesmanager.core.model.search.IndexProduct) ProductCriteria(com.salesmanager.core.model.catalog.product.ProductCriteria) ReadableProduct(com.salesmanager.shop.model.catalog.product.ReadableProduct) IndexProduct(com.salesmanager.core.model.search.IndexProduct) ProductList(com.salesmanager.core.model.catalog.product.ProductList) SearchProductList(com.salesmanager.shop.model.catalog.SearchProductList) SearchFacet(com.salesmanager.core.model.search.SearchFacet) ReadableCategory(com.salesmanager.shop.model.catalog.category.ReadableCategory) ProductList(com.salesmanager.core.model.catalog.product.ProductList) List(java.util.List) ValueList(com.salesmanager.shop.model.entity.ValueList) SearchProductList(com.salesmanager.shop.model.catalog.SearchProductList) SearchEntry(com.salesmanager.core.model.search.SearchEntry) SearchProductList(com.salesmanager.shop.model.catalog.SearchProductList)

Aggregations

ServiceException (com.salesmanager.core.business.exception.ServiceException)2 IndexProduct (com.salesmanager.core.model.search.IndexProduct)2 SearchEntry (com.salesmanager.core.model.search.SearchEntry)2 SearchFacet (com.salesmanager.core.model.search.SearchFacet)2 List (java.util.List)2 JsonNull (com.google.gson.JsonNull)1 ConversionException (com.salesmanager.core.business.exception.ConversionException)1 CategoryService (com.salesmanager.core.business.services.catalog.category.CategoryService)1 PricingService (com.salesmanager.core.business.services.catalog.product.PricingService)1 ProductService (com.salesmanager.core.business.services.catalog.product.ProductService)1 SearchService (com.salesmanager.core.business.services.search.SearchService)1 CoreConfiguration (com.salesmanager.core.business.utils.CoreConfiguration)1 Category (com.salesmanager.core.model.catalog.category.Category)1 Product (com.salesmanager.core.model.catalog.product.Product)1 ProductCriteria (com.salesmanager.core.model.catalog.product.ProductCriteria)1 ProductList (com.salesmanager.core.model.catalog.product.ProductList)1 MerchantStore (com.salesmanager.core.model.merchant.MerchantStore)1 Language (com.salesmanager.core.model.reference.language.Language)1 SearchKeywords (com.salesmanager.core.model.search.SearchKeywords)1 SearchResponse (com.salesmanager.core.model.search.SearchResponse)1