package org.jai.search.parts.two; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.List; import org.jai.search.config.ElasticSearchIndexConfig; import org.jai.search.data.SampleDataGeneratorService; import org.jai.search.model.Product; import org.jai.search.model.ProductSearchResult; import org.jai.search.model.SearchCriteria; import org.jai.search.model.SearchFacetName; import org.jai.search.test.AbstractSearchJUnit4SpringContextTests; import org.junit.Ignore; import org.junit.Test; public class ElasticSearchTutPart2Test extends AbstractSearchJUnit4SpringContextTests { @Test public void paginatedDocumentResults() { ElasticSearchIndexConfig config = ElasticSearchIndexConfig.COM_WEBSITE; SearchCriteria searchCriteria = new SearchCriteria(); searchCriteria.indices(config.getIndexAliasName()); searchCriteria.documentTypes(config.getDocumentType()); searchCriteria.size(0); ProductSearchResult searchProducts = productQueryService.searchProducts(searchCriteria); assertEquals(50, searchProducts.getTotalCount()); assertEquals(0, searchProducts.getProducts().size()); } @Test public void searchInMultipleIndexes() { ElasticSearchIndexConfig config = ElasticSearchIndexConfig.COM_WEBSITE; SearchCriteria searchCriteria = new SearchCriteria(); searchCriteria.indices(config.getIndexAliasName(), ElasticSearchIndexConfig.NL_WEBSITE.getIndexAliasName()); searchCriteria.documentTypes(config.getDocumentType()); searchCriteria.size(0); ProductSearchResult searchProducts = productQueryService.searchProducts(searchCriteria); //50 + 50 docs from both indices assertEquals(100, searchProducts.getTotalCount()); assertEquals(0, searchProducts.getProducts().size()); } @Test public void SearchDocumentReturnedFileds() { ElasticSearchIndexConfig config = ElasticSearchIndexConfig.COM_WEBSITE; SearchCriteria searchCriteria = new SearchCriteria(); searchCriteria.indices(config.getIndexAliasName()); searchCriteria.documentTypes(config.getDocumentType()); ProductSearchResult searchProducts = productQueryService.searchProducts(searchCriteria); //50, returned based on boosting. assertEquals(50, searchProducts.getTotalCount()); assertEquals(10, searchProducts.getProducts().size()); for (Product product : searchProducts.getProducts()) { assertEquals("Title "+product.getId(), product.getTitle()); assertEquals(product.getId().floatValue(), product.getPrice().floatValue(), 0); } } @Test public void queryText() { ElasticSearchIndexConfig config = ElasticSearchIndexConfig.COM_WEBSITE; SearchCriteria searchCriteria = new SearchCriteria(); searchCriteria.indices(config.getIndexAliasName()); searchCriteria.documentTypes(config.getDocumentType()); //total count products ProductSearchResult searchProducts = productQueryService.searchProducts(searchCriteria); assertEquals(sampleDataGenerator.generateProductsSampleData().size(), searchProducts.getTotalCount()); //total count product property searchCriteria.documentTypes(config.getPropertiesDocumentType()); searchProducts = productQueryService.searchProducts(searchCriteria); assertEquals(sampleDataGenerator.generateProductPropertySampleData().size(), searchProducts.getTotalCount()); //total count product groups searchCriteria.documentTypes(config.getGroupDocumentType()); searchProducts = productQueryService.searchProducts(searchCriteria); assertEquals(sampleDataGenerator.generateProductGroupSampleData().size(), searchProducts.getTotalCount()); searchCriteria.documentTypes(config.getDocumentType()); searchCriteria.query("query"); searchProducts = productQueryService.searchProducts(searchCriteria); //0 + 0 docs from both indices assertEquals(0, searchProducts.getTotalCount()); assertEquals(0, searchProducts.getProducts().size()); searchCriteria.query("Title"); searchProducts = productQueryService.searchProducts(searchCriteria); //50 + 50 docs from both indices assertEquals(50, searchProducts.getTotalCount()); assertEquals(10, searchProducts.getProducts().size()); searchCriteria.query("tile*"); searchProducts = productQueryService.searchProducts(searchCriteria); //0, special characters are escaped out assertEquals(0, searchProducts.getTotalCount()); assertEquals(0, searchProducts.getProducts().size()); } @Test @Ignore public void findSimilarProducts() { ElasticSearchIndexConfig config = ElasticSearchIndexConfig.COM_WEBSITE; SearchCriteria searchCriteria = new SearchCriteria(); searchCriteria.indices(config.getIndexAliasName()); searchCriteria.documentTypes(config.getDocumentType()); //0-4 products with color red Long productId = 0l; String[] fields = new String[]{SearchFacetName.CATEGORIES_FIELD_PREFIX + SearchFacetName.SEARCH_FACET_TYPE_COLOR.getFacetFieldNameAtLevel(2) + ".facet"}; List<Product> similarProducts = productQueryService.findSimilarProducts(config, fields, productId); assertEquals(4, similarProducts.size()); assertTrue(similarProducts.get(0).getId() < 5); //only Macbook products, 9 excluding current one fields = new String[]{SearchFacetName.CATEGORIES_FIELD_PREFIX + SearchFacetName.SEARCH_FACET_TYPE_PRODUCT_TYPE.getFacetFieldNameAtLevel(3) + ".facet"}; similarProducts = productQueryService.findSimilarProducts(config, fields, productId); assertEquals(9, similarProducts.size()); fields = new String[]{SearchFacetName.CATEGORIES_FIELD_PREFIX + SearchFacetName.SEARCH_FACET_TYPE_PRODUCT_TYPE.getFacetFieldNameAtLevel(3) + ".facet", SearchFacetName.CATEGORIES_FIELD_PREFIX + SearchFacetName.SEARCH_FACET_TYPE_PRODUCT_TYPE.getFacetFieldNameAtLevel(4) + ".facet"}; similarProducts = productQueryService.findSimilarProducts(config, fields, productId); assertEquals(9, similarProducts.size()); Product product = productQueryService.getProduct(config, productId); //the first 4 products on matching two fields, macbook air //rest 5 products on matching only one field, macbook assertTrue(product.categoryNameExists(SampleDataGeneratorService.MACBOOK_AIR)); for (int i = 0; i < 9; i++) { product = productQueryService.getProduct(config, similarProducts.get(i).getId()); // System.out.println(product); if(i < 4) { assertTrue(product.categoryNameExists(SampleDataGeneratorService.MACBOOK_AIR)); } else { assertTrue(product.categoryNameExists(SampleDataGeneratorService.MACBOOK_PRO)); } } } }