public void testPolyQuery() throws Exception { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); Long id = new Long(1); ExtendsA extendsA = new ExtendsA(); extendsA.setId(id); extendsA.setValue("value"); extendsA.setExtendsValue("evalue"); session.save("extends", extendsA); extendsA = (ExtendsA) session.load("extends", id); assertEquals("value", extendsA.getValue()); id = new Long(1); extendsA = new ExtendsA(); extendsA.setId(id); extendsA.setValue("value"); extendsA.setExtendsValue("evalue"); session.save("override", extendsA); extendsA = (ExtendsA) session.load("override", id); assertEquals("value", extendsA.getValue()); CompassHits hits = session.queryBuilder().polyAlias("base").hits(); assertEquals(2, hits.length()); hits = session.find("base"); assertEquals(2, hits.length()); tr.commit(); session.close(); }
public Pager search(Pager pager) { Compass compass = compassTemplate.getCompass(); CompassSession compassSession = compass.openSession(); CompassQueryBuilder compassQueryBuilder = compassSession.queryBuilder(); CompassBooleanQueryBuilder compassBooleanQueryBuilder = compassQueryBuilder.bool(); CompassQuery compassQuery = compassBooleanQueryBuilder .addMust(compassQueryBuilder.term("isMarketable", true)) .addMust(compassQueryBuilder.queryString("name:*" + pager.getKeyword() + "*").toQuery()) .toQuery(); if (StringUtils.isEmpty(pager.getOrderBy()) || pager.getOrderType() == null) { compassQuery .addSort("isBest", SortPropertyType.STRING, SortDirection.REVERSE) .addSort("isNew", SortPropertyType.STRING, SortDirection.REVERSE) .addSort("isHot", SortPropertyType.STRING, SortDirection.REVERSE); } else { if (pager.getOrderType() == OrderType.asc) { if (StringUtils.equalsIgnoreCase(pager.getOrderBy(), "price")) { compassQuery.addSort("price", SortPropertyType.FLOAT); } } else { if (StringUtils.equalsIgnoreCase(pager.getOrderBy(), "price")) { compassQuery.addSort("price", SortPropertyType.FLOAT, SortDirection.REVERSE); } } } CompassHits compassHits = compassQuery.hits(); List<Product> productList = new ArrayList<Product>(); int firstResult = (pager.getPageNumber() - 1) * pager.getPageSize(); int maxReasults = pager.getPageSize(); int totalCount = compassHits.length(); int end = Math.min(totalCount, firstResult + maxReasults); for (int i = firstResult; i < end; i++) { Product product = (Product) compassHits.data(i); productList.add(product); } compassSession.close(); pager.setList(productList); pager.setTotalCount(totalCount); return pager; }