use of io.vertigo.dynamo.collections.model.FacetValue in project vertigo by KleeGroup.
the class ESSearchRequestBuilder method dateRangeFacetToAggregationBuilder.
private static AggregationBuilder<DateRangeBuilder> dateRangeFacetToAggregationBuilder(final FacetDefinition facetDefinition, final DtField dtField) {
final DateRangeBuilder dateRangeBuilder = AggregationBuilders.dateRange(facetDefinition.getName()).field(dtField.getName()).format(DATE_PATTERN);
for (final FacetValue facetRange : facetDefinition.getFacetRanges()) {
final String filterValue = facetRange.getListFilter().getFilterValue();
Assertion.checkState(filterValue.contains(dtField.getName()), "RangeFilter query ({1}) should use defined fieldName {0}", dtField.getName(), filterValue);
final String[] parsedFilter = DtListPatternFilterUtil.parseFilter(filterValue, RANGE_PATTERN).get();
final String minValue = parsedFilter[3];
final String maxValue = parsedFilter[4];
if ("*".equals(minValue)) {
dateRangeBuilder.addUnboundedTo(filterValue, maxValue);
} else if ("*".equals(maxValue)) {
dateRangeBuilder.addUnboundedFrom(filterValue, minValue);
} else {
// always min include and max exclude in ElasticSearch
dateRangeBuilder.addRange(filterValue, minValue, maxValue);
}
}
return dateRangeBuilder;
}
use of io.vertigo.dynamo.collections.model.FacetValue in project vertigo by KleeGroup.
the class AbstractSearchManagerTest method testClusterByFacetTerm.
/**
* Test le facettage par term d'une liste.
*/
@Test
public void testClusterByFacetTerm() {
index(true);
final SearchQuery searchQuery = SearchQuery.builder(ListFilter.of("*:*")).withFacetClustering(makeFacetDefinition).build();
final FacetedQueryResult<Car, SearchQuery> result = searchManager.loadList(carIndexDefinition, searchQuery, null);
// On vérifie qu'il existe une valeur pour chaque marques et que le nombre d'occurrences est correct
final Map<String, List<Car>> databaseCluster = new HashMap<>();
for (final Car car : carDataBase.getAllCars()) {
databaseCluster.computeIfAbsent(car.getMake().toLowerCase(Locale.FRENCH), k -> new ArrayList<>()).add(car);
}
int previousCount = Integer.MAX_VALUE;
Assert.assertEquals(databaseCluster.size(), result.getClusters().size());
for (final Entry<FacetValue, DtList<Car>> entry : result.getClusters().entrySet()) {
final String searchFacetLabel = entry.getKey().getLabel().getDisplay().toLowerCase(Locale.FRENCH);
final int searchFacetCount = entry.getValue().size();
final List<Car> carsByMake = databaseCluster.get(searchFacetLabel);
Assert.assertEquals(carsByMake.size(), searchFacetCount);
Assert.assertTrue("Group order invalid", previousCount >= searchFacetCount);
previousCount = searchFacetCount;
for (final Car car : entry.getValue()) {
Assert.assertEquals(searchFacetLabel, car.getMake().toLowerCase(Locale.FRENCH));
}
}
}
use of io.vertigo.dynamo.collections.model.FacetValue in project vertigo by KleeGroup.
the class AbstractSearchManagerTest method testClusterByFacetRange.
/**
* Test le facettage par term d'une liste.
*/
@Test
public void testClusterByFacetRange() {
index(true);
final SearchQuery searchQuery = SearchQuery.builder(ListFilter.of("*:*")).withFacetClustering(// "avant 2000", "2000-2005", "après 2005"
yearFacetDefinition).build();
final FacetedQueryResult<Car, SearchQuery> result = searchManager.loadList(carIndexDefinition, searchQuery, null);
// On vérifie qu'il existe une valeur pour chaque marques et que le nombre d'occurrences est correct
final Map<String, List<Car>> databaseCluster = new HashMap<>();
databaseCluster.put(YearCluster.before2000.getLabel(), new ArrayList<>());
databaseCluster.put(YearCluster.between2000and2005.getLabel(), new ArrayList<>());
databaseCluster.put(YearCluster.after2005.getLabel(), new ArrayList<>());
for (final Car car : carDataBase.getAllCars()) {
if (car.getYear() < 2000) {
databaseCluster.get(YearCluster.before2000.getLabel()).add(car);
} else if (car.getYear() < 2005) {
databaseCluster.get(YearCluster.between2000and2005.getLabel()).add(car);
} else {
databaseCluster.get(YearCluster.after2005.getLabel()).add(car);
}
}
Assert.assertEquals(databaseCluster.size(), result.getClusters().size());
for (final Entry<FacetValue, DtList<Car>> entry : result.getClusters().entrySet()) {
final String searchFacetLabel = entry.getKey().getLabel().getDisplay().toLowerCase(Locale.FRENCH);
final int searchFacetCount = entry.getValue().size();
final List<Car> carsByYear = databaseCluster.get(searchFacetLabel);
Assert.assertEquals(carsByYear.size(), searchFacetCount);
for (final Car car : entry.getValue()) {
if (car.getYear() < 2000) {
Assert.assertEquals(searchFacetLabel, YearCluster.before2000.getLabel());
} else if (car.getYear() < 2005) {
Assert.assertEquals(searchFacetLabel, YearCluster.between2000and2005.getLabel());
} else {
Assert.assertEquals(searchFacetLabel, YearCluster.after2005.getLabel());
}
}
}
}
use of io.vertigo.dynamo.collections.model.FacetValue in project vertigo by KleeGroup.
the class AbstractSearchManagerTest method createFacetQuery.
private static FacetedQuery createFacetQuery(final String facetName, final String facetValueLabel, final FacetedQueryResult<Car, ?> result) {
// pb d'initialisation, et assert.notNull ne suffit pas
FacetValue facetValue = null;
final Facet facet = getFacetByName(result, facetName);
for (final Entry<FacetValue, Long> entry : facet.getFacetValues().entrySet()) {
if (entry.getKey().getLabel().getDisplay().toLowerCase(Locale.FRENCH).contains(facetValueLabel)) {
facetValue = entry.getKey();
break;
}
}
if (facetValue == null) {
throw new IllegalArgumentException("Pas de FacetValue contenant " + facetValueLabel + " dans la facette " + facetName);
}
final FacetedQuery previousQuery = result.getFacetedQuery().get();
final SelectedFacetValues queryFilters = SelectedFacetValues.of(previousQuery.getSelectedFacetValues()).add(facet.getDefinition(), facetValue).build();
return new FacetedQuery(previousQuery.getDefinition(), queryFilters);
}
use of io.vertigo.dynamo.collections.model.FacetValue in project vertigo by KleeGroup.
the class AbstractSearchManagerTest method testFacetResultByTerm.
private void testFacetResultByTerm(final FacetedQueryResult<Item, ?> result) {
Assert.assertEquals(itemDataBase.size(), result.getCount());
// On vérifie qu'il y a le bon nombre de facettes.
Assert.assertEquals(4, result.getFacets().size());
// On recherche la facette constructeur
final Facet manufacturerFacet = getFacetByName(result, "FCT_MANUFACTURER_ITEM");
// On vérifie que l'on est sur le champ Manufacturer
Assert.assertEquals("MANUFACTURER", manufacturerFacet.getDefinition().getDtField().getName());
Assert.assertFalse(manufacturerFacet.getDefinition().isRangeFacet());
// On vérifie qu'il existe une valeur pour peugeot et que le nombre d'occurrences est correct
boolean found = false;
final String manufacturer = "peugeot";
for (final Entry<FacetValue, Long> entry : manufacturerFacet.getFacetValues().entrySet()) {
if (entry.getKey().getLabel().getDisplay().toLowerCase(Locale.FRENCH).equals(manufacturer)) {
found = true;
Assert.assertEquals(itemDataBase.getItemsByManufacturer(manufacturer).size(), entry.getValue().intValue());
}
}
Assert.assertTrue(found);
checkOrderByCount(manufacturerFacet);
checkOrderByAlpha(getFacetByName(result, "FCT_MANUFACTURER_ITEM_ALPHA"));
checkOrderByCount(getFacetByName(result, "FCT_DESCRIPTION_ITEM"));
}
Aggregations