mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-23 04:22:12 +00:00
DATAES-180 - added faceted page back powered by aggregation
This commit is contained in:
parent
6ffac62b3e
commit
392a87ab0a
@ -24,11 +24,15 @@ import org.elasticsearch.search.aggregations.Aggregation;
|
||||
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
|
||||
import org.elasticsearch.search.aggregations.bucket.range.Range;
|
||||
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
|
||||
import org.elasticsearch.search.aggregations.metrics.stats.Stats;
|
||||
import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats;
|
||||
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
|
||||
import org.joda.time.DateTime;
|
||||
import org.springframework.data.domain.PageImpl;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
|
||||
import org.springframework.data.elasticsearch.core.facet.AbstractFacetRequest;
|
||||
import org.springframework.data.elasticsearch.core.facet.FacetResult;
|
||||
import org.springframework.data.elasticsearch.core.facet.request.RangeFacetRequest;
|
||||
import org.springframework.data.elasticsearch.core.facet.result.*;
|
||||
|
||||
/**
|
||||
@ -88,24 +92,35 @@ public abstract class FacetedPageImpl<T> extends PageImpl<T> implements FacetedP
|
||||
for (Terms.Bucket t : ((Terms) agg).getBuckets()) {
|
||||
terms.add(new Term(t.getKeyAsString(), t.getDocCount()));
|
||||
}
|
||||
addFacet(new TermResult(agg.getName(), terms, terms.size(), ((Terms) agg).getSumOfOtherDocCounts(), -1));
|
||||
addFacet(new TermResult(agg.getName(), terms, terms.size(), ((Terms) agg).getSumOfOtherDocCounts(), 0));
|
||||
}
|
||||
if (agg instanceof Range) {
|
||||
List<? extends Range.Bucket> buckets = ((Range) agg).getBuckets();
|
||||
List<org.springframework.data.elasticsearch.core.facet.result.Range> ranges = new ArrayList<org.springframework.data.elasticsearch.core.facet.result.Range>();
|
||||
for (Range.Bucket b : buckets) {
|
||||
ExtendedStats rStats = (ExtendedStats) b.getAggregations().get(AbstractFacetRequest.INTERNAL_STATS);
|
||||
if (rStats != null) {
|
||||
Sum sum = (Sum) b.getAggregations().get(RangeFacetRequest.RANGE_INTERNAL_SUM);
|
||||
ranges.add(new org.springframework.data.elasticsearch.core.facet.result.Range((Double) b.getFrom(), (Double) b.getTo(), b.getDocCount(), sum != null ? sum.getValue() : rStats.getSum(), rStats.getCount(), rStats.getMin(), rStats.getMax()));
|
||||
} else {
|
||||
ranges.add(new org.springframework.data.elasticsearch.core.facet.result.Range((Double) b.getFrom(), (Double) b.getTo(), b.getDocCount(), 0, 0, 0, 0));
|
||||
}
|
||||
}
|
||||
addFacet(new RangeResult(agg.getName(), ranges));
|
||||
}
|
||||
if (agg instanceof Stats) {
|
||||
Stats stats = (Stats) agg;
|
||||
addFacet(new StatisticalResult(agg.getName(), stats.getCount(), stats.getMax(), stats.getMin(), stats.getAvg(), -1, -1, stats.getSum(), -1));
|
||||
if (agg instanceof ExtendedStats) {
|
||||
ExtendedStats stats = (ExtendedStats) agg;
|
||||
addFacet(new StatisticalResult(agg.getName(), stats.getCount(), stats.getMax(), stats.getMin(), stats.getAvg(), stats.getStdDeviation(), stats.getSumOfSquares(), stats.getSum(), stats.getVariance()));
|
||||
}
|
||||
if (agg instanceof Histogram) {
|
||||
List<IntervalUnit> intervals = new ArrayList<IntervalUnit>();
|
||||
for (Histogram.Bucket h : ((Histogram) agg).getBuckets()) {
|
||||
new IntervalUnit((Long) h.getKey(), h.getDocCount(), h.getDocCount(), -1, -1, -1, -1);
|
||||
ExtendedStats hStats = (ExtendedStats) h.getAggregations().get(AbstractFacetRequest.INTERNAL_STATS);
|
||||
if (hStats != null) {
|
||||
intervals.add(new IntervalUnit(((DateTime) h.getKey()).getMillis(), h.getDocCount(), h.getDocCount(), hStats.getSum(), hStats.getAvg(), hStats.getMin(), hStats.getMax()));
|
||||
} else {
|
||||
intervals.add(new IntervalUnit(((DateTime) h.getKey()).getMillis(), h.getDocCount(), h.getDocCount(), 0, 0, 0, 0));
|
||||
}
|
||||
}
|
||||
addFacet(new HistogramResult(agg.getName(), intervals));
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ import org.springframework.util.Assert;
|
||||
@Deprecated
|
||||
public abstract class AbstractFacetRequest implements FacetRequest {
|
||||
|
||||
public static final String INTERNAL_STATS = "internal-stats";
|
||||
|
||||
private String name;
|
||||
private boolean applyQueryFilter;
|
||||
|
||||
|
@ -1,81 +0,0 @@
|
||||
///*
|
||||
// * Copyright 2014 the original author or authors.
|
||||
// *
|
||||
// * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// * you may not use this file except in compliance with the License.
|
||||
// * You may obtain a copy of the License at
|
||||
// *
|
||||
// * http://www.apache.org/licenses/LICENSE-2.0
|
||||
// *
|
||||
// * Unless required by applicable law or agreed to in writing, software
|
||||
// * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// * See the License for the specific language governing permissions and
|
||||
// * limitations under the License.
|
||||
// */
|
||||
//package org.springframework.data.elasticsearch.core.facet;
|
||||
//
|
||||
//import java.util.ArrayList;
|
||||
//import java.util.List;
|
||||
//
|
||||
//import org.elasticsearch.search.facet.Facet;
|
||||
//import org.elasticsearch.search.facet.histogram.HistogramFacet;
|
||||
//import org.elasticsearch.search.facet.range.RangeFacet;
|
||||
//import org.elasticsearch.search.facet.statistical.StatisticalFacet;
|
||||
//import org.elasticsearch.search.facet.terms.TermsFacet;
|
||||
//import org.springframework.data.elasticsearch.core.facet.result.*;
|
||||
//
|
||||
///**
|
||||
// * @author Artur Konczak
|
||||
// * @author Petar Tahchiev
|
||||
// */
|
||||
//public class DefaultFacetMapper {
|
||||
//
|
||||
// public static FacetResult parse(Facet facet) {
|
||||
// if (facet instanceof TermsFacet) {
|
||||
// return parseTerm((TermsFacet) facet);
|
||||
// }
|
||||
//
|
||||
// if (facet instanceof RangeFacet) {
|
||||
// return parseRange((RangeFacet) facet);
|
||||
// }
|
||||
//
|
||||
// if (facet instanceof StatisticalFacet) {
|
||||
// return parseStatistical((StatisticalFacet) facet);
|
||||
// }
|
||||
//
|
||||
// if (facet instanceof HistogramFacet) {
|
||||
// return parseHistogram((HistogramFacet) facet);
|
||||
// }
|
||||
//
|
||||
// return null;
|
||||
// }
|
||||
//
|
||||
// private static FacetResult parseTerm(TermsFacet facet) {
|
||||
// List<Term> entries = new ArrayList<Term>();
|
||||
// for (TermsFacet.Entry entry : facet.getEntries()) {
|
||||
// entries.add(new Term(entry.getTerm().toString(), entry.getCount()));
|
||||
// }
|
||||
// return new TermResult(facet.getName(), entries, facet.getTotalCount(), facet.getOtherCount(), facet.getMissingCount());
|
||||
// }
|
||||
//
|
||||
// private static FacetResult parseRange(RangeFacet facet) {
|
||||
// List<Range> entries = new ArrayList<Range>();
|
||||
// for (RangeFacet.Entry entry : facet.getEntries()) {
|
||||
// entries.add(new Range(entry.getFrom() == Double.NEGATIVE_INFINITY ? null : entry.getFrom(), entry.getTo() == Double.POSITIVE_INFINITY ? null : entry.getTo(), entry.getCount(), entry.getTotal(), entry.getTotalCount(), entry.getMin(), entry.getMax()));
|
||||
// }
|
||||
// return new RangeResult(facet.getName(), entries);
|
||||
// }
|
||||
//
|
||||
// private static FacetResult parseStatistical(StatisticalFacet facet) {
|
||||
// return new StatisticalResult(facet.getName(), facet.getCount(), facet.getMax(), facet.getMin(), facet.getMean(), facet.getStdDeviation(), facet.getSumOfSquares(), facet.getTotal(), facet.getVariance());
|
||||
// }
|
||||
//
|
||||
// private static FacetResult parseHistogram(HistogramFacet facet) {
|
||||
// List<IntervalUnit> entries = new ArrayList<IntervalUnit>();
|
||||
// for (HistogramFacet.Entry entry : facet.getEntries()) {
|
||||
// entries.add(new IntervalUnit(entry.getKey(), entry.getCount(), entry.getTotalCount(), entry.getTotal(), entry.getMean(), entry.getMin(), entry.getMax()));
|
||||
// }
|
||||
// return new HistogramResult(facet.getName(), entries);
|
||||
// }
|
||||
//}
|
@ -66,6 +66,8 @@ public class HistogramFacetRequest extends AbstractFacetRequest {
|
||||
dateHistogramBuilder.interval(interval);
|
||||
}
|
||||
|
||||
dateHistogramBuilder.subAggregation(AggregationBuilders.extendedStats(INTERNAL_STATS));
|
||||
|
||||
return dateHistogramBuilder;
|
||||
}
|
||||
}
|
@ -19,6 +19,7 @@ package org.springframework.data.elasticsearch.core.facet.request;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
|
||||
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
||||
import org.elasticsearch.search.aggregations.bucket.range.RangeBuilder;
|
||||
@ -35,6 +36,7 @@ import org.springframework.util.Assert;
|
||||
@Deprecated
|
||||
public class RangeFacetRequest extends AbstractFacetRequest {
|
||||
|
||||
public static final String RANGE_INTERNAL_SUM = "range-internal-sum";
|
||||
private String field;
|
||||
private String keyField;
|
||||
private String valueField;
|
||||
@ -50,7 +52,8 @@ public class RangeFacetRequest extends AbstractFacetRequest {
|
||||
}
|
||||
|
||||
public void setFields(String keyField, String valueField) {
|
||||
throw new UnsupportedOperationException("Native Facet are not supported in Elasticsearch 2.x - use Aggregation");
|
||||
this.keyField = keyField;
|
||||
this.valueField = valueField;
|
||||
}
|
||||
|
||||
public void range(Double from, Double to) {
|
||||
@ -74,13 +77,18 @@ public class RangeFacetRequest extends AbstractFacetRequest {
|
||||
Assert.notNull(getName(), "Facet name can't be a null !!!");
|
||||
|
||||
RangeBuilder rangeBuilder = AggregationBuilders.range(getName());
|
||||
rangeBuilder.field(field);
|
||||
rangeBuilder.field(StringUtils.isNotBlank(keyField) ? keyField : field );
|
||||
|
||||
for (Entry entry : entries) {
|
||||
DoubleEntry doubleEntry = (DoubleEntry) entry;
|
||||
rangeBuilder.addRange(validateValue(doubleEntry.getFrom(), Double.NEGATIVE_INFINITY), validateValue(doubleEntry.getTo(), Double.POSITIVE_INFINITY));
|
||||
}
|
||||
|
||||
rangeBuilder.subAggregation(AggregationBuilders.extendedStats(INTERNAL_STATS));
|
||||
if(StringUtils.isNotBlank(valueField)){
|
||||
rangeBuilder.subAggregation(AggregationBuilders.sum(RANGE_INTERNAL_SUM).field(valueField));
|
||||
}
|
||||
|
||||
return rangeBuilder;
|
||||
}
|
||||
|
||||
|
@ -48,6 +48,6 @@ public class StatisticalFacetRequest extends AbstractFacetRequest {
|
||||
public AbstractAggregationBuilder getFacet() {
|
||||
Assert.notNull(getName(), "Facet name can't be a null !!!");
|
||||
Assert.isTrue(StringUtils.isNotBlank(field) && fields == null, "Please select field or fields on which to build the facets !!!");
|
||||
return AggregationBuilders.stats(getName()).field(field);
|
||||
return AggregationBuilders.extendedStats(getName()).field(field);
|
||||
}
|
||||
}
|
@ -46,8 +46,8 @@ public class TermFacetRequest extends AbstractFacetRequest {
|
||||
}
|
||||
|
||||
public void setFields(String... fields) {
|
||||
Assert.isTrue(ArrayUtils.isNotEmpty(fields), "Term agg need one field");
|
||||
Assert.isTrue(ArrayUtils.getLength(fields) == 1, "Term agg need one field");
|
||||
Assert.isTrue(ArrayUtils.isNotEmpty(fields), "Term agg need one field only");
|
||||
Assert.isTrue(ArrayUtils.getLength(fields) == 1, "Term agg need one field only");
|
||||
this.fields = fields;
|
||||
}
|
||||
|
||||
@ -84,11 +84,11 @@ public class TermFacetRequest extends AbstractFacetRequest {
|
||||
case ascTerm:
|
||||
termsBuilder.order(Terms.Order.term(true));
|
||||
break;
|
||||
case ascCount:
|
||||
termsBuilder.order(Terms.Order.count(true));
|
||||
case descCount:
|
||||
termsBuilder.order(Terms.Order.count(false));
|
||||
break;
|
||||
default:
|
||||
termsBuilder.order(Terms.Order.count(false));
|
||||
termsBuilder.order(Terms.Order.count(true));
|
||||
}
|
||||
if (ArrayUtils.isNotEmpty(excludeTerms)) {
|
||||
termsBuilder.exclude(excludeTerms);
|
||||
|
@ -12,7 +12,7 @@
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*//*
|
||||
*/
|
||||
|
||||
package org.springframework.data.elasticsearch.core.facet;
|
||||
|
||||
@ -20,8 +20,6 @@ import static org.elasticsearch.index.query.QueryBuilders.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.elasticsearch.index.query.FilterBuilders;
|
||||
import org.elasticsearch.search.facet.FacetBuilders;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@ -36,13 +34,12 @@ import org.springframework.data.elasticsearch.core.query.SearchQuery;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
*/
|
||||
/**
|
||||
* @author Rizwan Idrees
|
||||
* @author Mohsin Husen
|
||||
* @author Jonathan Yan
|
||||
* @author Artur Konczak
|
||||
*//*
|
||||
*/
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration("classpath:elasticsearch-template-test.xml")
|
||||
@ -64,7 +61,7 @@ public class ElasticsearchTemplateFacetTests {
|
||||
elasticsearchTemplate.deleteIndex(ArticleEntity.class);
|
||||
elasticsearchTemplate.createIndex(ArticleEntity.class);
|
||||
elasticsearchTemplate.putMapping(ArticleEntity.class);
|
||||
elasticsearchTemplate.refresh(ArticleEntity.class, true);
|
||||
elasticsearchTemplate.refresh(ArticleEntity.class);
|
||||
|
||||
IndexQuery article1 = new ArticleEntityBuilder("1").title("article four").addAuthor(RIZWAN_IDREES).addAuthor(ARTUR_KONCZAK).addAuthor(MOHSIN_HUSEN).addAuthor(JONATHAN_YAN).score(10).buildIndex();
|
||||
IndexQuery article2 = new ArticleEntityBuilder("2").title("article three").addAuthor(RIZWAN_IDREES).addAuthor(ARTUR_KONCZAK).addAuthor(MOHSIN_HUSEN).addPublishedYear(YEAR_2000).score(20).buildIndex();
|
||||
@ -75,7 +72,7 @@ public class ElasticsearchTemplateFacetTests {
|
||||
elasticsearchTemplate.index(article2);
|
||||
elasticsearchTemplate.index(article3);
|
||||
elasticsearchTemplate.index(article4);
|
||||
elasticsearchTemplate.refresh(ArticleEntity.class, true);
|
||||
elasticsearchTemplate.refresh(ArticleEntity.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -92,21 +89,21 @@ public class ElasticsearchTemplateFacetTests {
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm(), is(RIZWAN_IDREES));
|
||||
assertThat(term.getCount(), is(4));
|
||||
assertThat(term.getCount(), is(4l));
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm(), is(ARTUR_KONCZAK));
|
||||
assertThat(term.getCount(), is(3));
|
||||
assertThat(term.getCount(), is(3l));
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm(), is(MOHSIN_HUSEN));
|
||||
assertThat(term.getCount(), is(2));
|
||||
assertThat(term.getCount(), is(2l));
|
||||
|
||||
term = facet.getTerms().get(3);
|
||||
assertThat(term.getTerm(), is(JONATHAN_YAN));
|
||||
assertThat(term.getCount(), is(1));
|
||||
assertThat(term.getCount(), is(1l));
|
||||
|
||||
assertThat(facet.getTotal(), is(10l));
|
||||
assertThat(facet.getTotal(), is(4l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
assertThat(facet.getMissing(), is(0l));
|
||||
}
|
||||
@ -117,27 +114,26 @@ public class ElasticsearchTemplateFacetTests {
|
||||
// given
|
||||
String facetName = "fauthors";
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFilter(FilterBuilders.notFilter(FilterBuilders.termFilter("title", "four")))
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("authors.untouched").build()).build();
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
// then
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(3)));
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(4)));
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm(), is(RIZWAN_IDREES));
|
||||
assertThat(term.getCount(), is(3));
|
||||
assertThat(term.getCount(), is(4l));
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm(), is(ARTUR_KONCZAK));
|
||||
assertThat(term.getCount(), is(2));
|
||||
assertThat(term.getCount(), is(3l));
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm(), is(MOHSIN_HUSEN));
|
||||
assertThat(term.getCount(), is(1));
|
||||
assertThat(term.getCount(), is(2l));
|
||||
|
||||
assertThat(facet.getTotal(), is(6l));
|
||||
assertThat(facet.getTotal(), is(4l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
assertThat(facet.getMissing(), is(0l));
|
||||
}
|
||||
@ -147,23 +143,26 @@ public class ElasticsearchTemplateFacetTests {
|
||||
// given
|
||||
String facetName = "fauthors";
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFilter(FilterBuilders.notFilter(FilterBuilders.termFilter("title", "four")))
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("authors.untouched").excludeTerms(RIZWAN_IDREES, ARTUR_KONCZAK).build()).build();
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
// then
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(3)));
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(4)));
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
|
||||
assertThat(facet.getTerms().size(), is(1));
|
||||
assertThat(facet.getTerms().size(), is(2));
|
||||
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm(), is(MOHSIN_HUSEN));
|
||||
assertThat(term.getCount(), is(1));
|
||||
assertThat(term.getCount(), is(2l));
|
||||
|
||||
assertThat(facet.getTotal(), is(6l));
|
||||
assertThat(facet.getOther(), is(5l));
|
||||
Term term1 = facet.getTerms().get(1);
|
||||
assertThat(term1.getTerm(), is(JONATHAN_YAN));
|
||||
assertThat(term1.getCount(), is(1l));
|
||||
|
||||
assertThat(facet.getTotal(), is(2l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
assertThat(facet.getMissing(), is(0l));
|
||||
}
|
||||
|
||||
@ -182,21 +181,21 @@ public class ElasticsearchTemplateFacetTests {
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm(), is(ARTUR_KONCZAK));
|
||||
assertThat(term.getCount(), is(3));
|
||||
assertThat(term.getCount(), is(3l));
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm(), is(JONATHAN_YAN));
|
||||
assertThat(term.getCount(), is(1));
|
||||
assertThat(term.getCount(), is(1l));
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm(), is(MOHSIN_HUSEN));
|
||||
assertThat(term.getCount(), is(2));
|
||||
assertThat(term.getCount(), is(2l));
|
||||
|
||||
term = facet.getTerms().get(3);
|
||||
assertThat(term.getTerm(), is(RIZWAN_IDREES));
|
||||
assertThat(term.getCount(), is(4));
|
||||
assertThat(term.getCount(), is(4l));
|
||||
|
||||
assertThat(facet.getTotal(), is(10l));
|
||||
assertThat(facet.getTotal(), is(4l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
assertThat(facet.getMissing(), is(0l));
|
||||
}
|
||||
@ -216,21 +215,21 @@ public class ElasticsearchTemplateFacetTests {
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm(), is(JONATHAN_YAN));
|
||||
assertThat(term.getCount(), is(1));
|
||||
assertThat(term.getCount(), is(1l));
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm(), is(MOHSIN_HUSEN));
|
||||
assertThat(term.getCount(), is(2));
|
||||
assertThat(term.getCount(), is(2l));
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm(), is(ARTUR_KONCZAK));
|
||||
assertThat(term.getCount(), is(3));
|
||||
assertThat(term.getCount(), is(3l));
|
||||
|
||||
term = facet.getTerms().get(3);
|
||||
assertThat(term.getTerm(), is(RIZWAN_IDREES));
|
||||
assertThat(term.getCount(), is(4));
|
||||
assertThat(term.getCount(), is(4l));
|
||||
|
||||
assertThat(facet.getTotal(), is(10l));
|
||||
assertThat(facet.getTotal(), is(4l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
assertThat(facet.getMissing(), is(0l));
|
||||
}
|
||||
@ -252,19 +251,19 @@ public class ElasticsearchTemplateFacetTests {
|
||||
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2000)));
|
||||
assertThat(term.getCount(), is(3));
|
||||
assertThat(term.getCount(), is(3l));
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2001)));
|
||||
assertThat(term.getCount(), is(2));
|
||||
assertThat(term.getCount(), is(2l));
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2002)));
|
||||
assertThat(term.getCount(), is(1));
|
||||
assertThat(term.getCount(), is(1l));
|
||||
|
||||
assertThat(facet.getTotal(), is(6l));
|
||||
assertThat(facet.getTotal(), is(3l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
assertThat(facet.getMissing(), is(1l));
|
||||
assertThat(facet.getMissing(), is(0l));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -273,36 +272,35 @@ public class ElasticsearchTemplateFacetTests {
|
||||
// given
|
||||
String facetName = "fyears";
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFilter(FilterBuilders.notFilter(FilterBuilders.missingFilter("publishedYears")))
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("publishedYears").descCount().build()).build();
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
// then
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(3)));
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(4)));
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
assertThat(facet.getTerms().size(), is(equalTo(3)));
|
||||
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2000)));
|
||||
assertThat(term.getCount(), is(3));
|
||||
assertThat(term.getCount(), is(3l));
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2001)));
|
||||
assertThat(term.getCount(), is(2));
|
||||
assertThat(term.getCount(), is(2l));
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2002)));
|
||||
assertThat(term.getCount(), is(1));
|
||||
assertThat(term.getCount(), is(1l));
|
||||
|
||||
assertThat(facet.getTotal(), is(6l));
|
||||
assertThat(facet.getTotal(), is(3l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
assertThat(facet.getMissing(), is(0l));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void shouldReturnSingleFacetOverYearsAndAuthorsForGivenQuery() {
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void shouldThrowExeptionsForMultiFieldFacet() {
|
||||
|
||||
// given
|
||||
String facetName = "fyears";
|
||||
@ -318,31 +316,31 @@ public class ElasticsearchTemplateFacetTests {
|
||||
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2000)));
|
||||
assertThat(term.getCount(), is(3));
|
||||
assertThat(term.getCount(), is(3l));
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2001)));
|
||||
assertThat(term.getCount(), is(2));
|
||||
assertThat(term.getCount(), is(2l));
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2002)));
|
||||
assertThat(term.getCount(), is(1));
|
||||
assertThat(term.getCount(), is(1l));
|
||||
|
||||
term = facet.getTerms().get(3);
|
||||
assertThat(term.getTerm(), is(ARTUR_KONCZAK));
|
||||
assertThat(term.getCount(), is(3));
|
||||
assertThat(term.getCount(), is(3l));
|
||||
|
||||
term = facet.getTerms().get(4);
|
||||
assertThat(term.getTerm(), is(JONATHAN_YAN));
|
||||
assertThat(term.getCount(), is(1));
|
||||
assertThat(term.getCount(), is(1l));
|
||||
|
||||
term = facet.getTerms().get(5);
|
||||
assertThat(term.getTerm(), is(MOHSIN_HUSEN));
|
||||
assertThat(term.getCount(), is(2));
|
||||
assertThat(term.getCount(), is(2l));
|
||||
|
||||
term = facet.getTerms().get(6);
|
||||
assertThat(term.getTerm(), is(RIZWAN_IDREES));
|
||||
assertThat(term.getCount(), is(4));
|
||||
assertThat(term.getCount(), is(4l));
|
||||
|
||||
assertThat(facet.getTotal(), is(16l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
@ -369,46 +367,46 @@ public class ElasticsearchTemplateFacetTests {
|
||||
|
||||
Term numberTerm = numberFacet.getTerms().get(0);
|
||||
assertThat(numberTerm.getTerm(), is(Integer.toString(YEAR_2000)));
|
||||
assertThat(numberTerm.getCount(), is(3));
|
||||
assertThat(numberTerm.getCount(), is(3l));
|
||||
|
||||
numberTerm = numberFacet.getTerms().get(1);
|
||||
assertThat(numberTerm.getTerm(), is(Integer.toString(YEAR_2001)));
|
||||
assertThat(numberTerm.getCount(), is(2));
|
||||
assertThat(numberTerm.getCount(), is(2l));
|
||||
|
||||
numberTerm = numberFacet.getTerms().get(2);
|
||||
assertThat(numberTerm.getTerm(), is(Integer.toString(YEAR_2002)));
|
||||
assertThat(numberTerm.getCount(), is(1));
|
||||
assertThat(numberTerm.getCount(), is(1l));
|
||||
|
||||
TermResult stringFacet = (TermResult) result.getFacet(stringFacetName);
|
||||
Term stringTerm = stringFacet.getTerms().get(0);
|
||||
assertThat(stringTerm.getTerm(), is(ARTUR_KONCZAK));
|
||||
assertThat(stringTerm.getCount(), is(3));
|
||||
assertThat(stringTerm.getCount(), is(3l));
|
||||
|
||||
stringTerm = stringFacet.getTerms().get(1);
|
||||
assertThat(stringTerm.getTerm(), is(JONATHAN_YAN));
|
||||
assertThat(stringTerm.getCount(), is(1));
|
||||
assertThat(stringTerm.getCount(), is(1l));
|
||||
|
||||
stringTerm = stringFacet.getTerms().get(2);
|
||||
assertThat(stringTerm.getTerm(), is(MOHSIN_HUSEN));
|
||||
assertThat(stringTerm.getCount(), is(2));
|
||||
assertThat(stringTerm.getCount(), is(2l));
|
||||
|
||||
stringTerm = stringFacet.getTerms().get(3);
|
||||
assertThat(stringTerm.getTerm(), is(RIZWAN_IDREES));
|
||||
assertThat(stringTerm.getCount(), is(4));
|
||||
assertThat(stringTerm.getCount(), is(4l));
|
||||
|
||||
assertThat(stringFacet.getTotal(), is(10l));
|
||||
assertThat(stringFacet.getTotal(), is(4l));
|
||||
assertThat(stringFacet.getOther(), is(0l));
|
||||
assertThat(stringFacet.getMissing(), is(0l));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void shouldReturnFacetedYearsForNativeFacet() {
|
||||
@Test(expected = UnsupportedOperationException.class)
|
||||
public void shouldThrowExceptionForNativeFacets() {
|
||||
|
||||
// given
|
||||
String facetName = "fyears";
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(new NativeFacetRequest(FacetBuilders.termsFacet(facetName).field("publishedYears"))).build();
|
||||
.withFacet(new NativeFacetRequest()).build();
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
// then
|
||||
@ -419,15 +417,15 @@ public class ElasticsearchTemplateFacetTests {
|
||||
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2000)));
|
||||
assertThat(term.getCount(), is(3));
|
||||
assertThat(term.getCount(), is(3l));
|
||||
|
||||
term = facet.getTerms().get(1);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2001)));
|
||||
assertThat(term.getCount(), is(2));
|
||||
assertThat(term.getCount(), is(2l));
|
||||
|
||||
term = facet.getTerms().get(2);
|
||||
assertThat(term.getTerm(), is(Integer.toString(YEAR_2002)));
|
||||
assertThat(term.getCount(), is(1));
|
||||
assertThat(term.getCount(), is(1l));
|
||||
|
||||
assertThat(facet.getTotal(), is(6l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
@ -439,12 +437,11 @@ public class ElasticsearchTemplateFacetTests {
|
||||
// given
|
||||
String facetName = "regex_authors";
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFilter(FilterBuilders.notFilter(FilterBuilders.termFilter("title", "four")))
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("authors.untouched").regex("Art.*").build()).build();
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
// then
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(3)));
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(4)));
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
|
||||
@ -452,10 +449,10 @@ public class ElasticsearchTemplateFacetTests {
|
||||
|
||||
Term term = facet.getTerms().get(0);
|
||||
assertThat(term.getTerm(), is(ARTUR_KONCZAK));
|
||||
assertThat(term.getCount(), is(2));
|
||||
assertThat(term.getCount(), is(3l));
|
||||
|
||||
assertThat(facet.getTotal(), is(6l));
|
||||
assertThat(facet.getOther(), is(4l));
|
||||
assertThat(facet.getTotal(), is(1l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
assertThat(facet.getMissing(), is(0l));
|
||||
}
|
||||
|
||||
@ -464,18 +461,17 @@ public class ElasticsearchTemplateFacetTests {
|
||||
// given
|
||||
String facetName = "all_authors";
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFilter(FilterBuilders.notFilter(FilterBuilders.termFilter("title", "four")))
|
||||
.withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields("authors.untouched").allTerms().build()).build();
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
// then
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(3)));
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(4)));
|
||||
|
||||
TermResult facet = (TermResult) result.getFacet(facetName);
|
||||
|
||||
assertThat(facet.getTerms().size(), is(4));
|
||||
|
||||
assertThat(facet.getTotal(), is(6l));
|
||||
assertThat(facet.getTotal(), is(4l));
|
||||
assertThat(facet.getOther(), is(0l));
|
||||
assertThat(facet.getMissing(), is(0l));
|
||||
}
|
||||
@ -499,7 +495,7 @@ public class ElasticsearchTemplateFacetTests {
|
||||
assertThat(facet.getRanges().size(), is(equalTo(3)));
|
||||
|
||||
Range range = facet.getRanges().get(0);
|
||||
assertThat(range.getFrom(), nullValue());
|
||||
assertThat(range.getFrom(), is(Double.NEGATIVE_INFINITY));
|
||||
assertThat(range.getTo(), is((double) YEAR_2000));
|
||||
assertThat(range.getCount(), is(0L));
|
||||
assertThat(range.getTotal(), is(0.0));
|
||||
@ -508,17 +504,17 @@ public class ElasticsearchTemplateFacetTests {
|
||||
assertThat(range.getFrom(), is((double) YEAR_2000));
|
||||
assertThat(range.getTo(), is((double) YEAR_2002));
|
||||
assertThat(range.getCount(), is(3L));
|
||||
assertThat(range.getTotal(), is(6000.0));
|
||||
assertThat(range.getTotal(), is(12004.0));
|
||||
|
||||
range = facet.getRanges().get(2);
|
||||
assertThat(range.getFrom(), is((double) YEAR_2002));
|
||||
assertThat(range.getTo(), nullValue());
|
||||
assertThat(range.getTo(), is(Double.POSITIVE_INFINITY));
|
||||
assertThat(range.getCount(), is(1L));
|
||||
assertThat(range.getTotal(), is(2002.0));
|
||||
assertThat(range.getTotal(), is(6003.0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnKeyValueRangeFacetForGivenQuery() {
|
||||
public void shouldReturnKeyValueRangeFacetForStringValuesInGivenQuery() {
|
||||
// given
|
||||
String facetName = "rangeScoreOverYears";
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
@ -535,7 +531,7 @@ public class ElasticsearchTemplateFacetTests {
|
||||
assertThat(facet.getRanges().size(), is(equalTo(3)));
|
||||
|
||||
Range range = facet.getRanges().get(0);
|
||||
assertThat(range.getFrom(), nullValue());
|
||||
assertThat(range.getFrom(), is(Double.NEGATIVE_INFINITY));
|
||||
assertThat(range.getTo(), is((double) YEAR_2000));
|
||||
assertThat(range.getCount(), is(0L));
|
||||
assertThat(range.getTotal(), is(0.0));
|
||||
@ -548,43 +544,7 @@ public class ElasticsearchTemplateFacetTests {
|
||||
|
||||
range = facet.getRanges().get(2);
|
||||
assertThat(range.getFrom(), is((double) YEAR_2002));
|
||||
assertThat(range.getTo(), nullValue());
|
||||
assertThat(range.getCount(), is(1L));
|
||||
assertThat(range.getTotal(), is(40.0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnKeyValueRangeFacetForStringValuesInGivenQuery() {
|
||||
// given
|
||||
String facetName = "rangeScoreOverYears";
|
||||
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withFacet(
|
||||
new RangeFacetRequestBuilder(facetName).fields(PUBLISHED_YEARS, "score")
|
||||
.to("2000").range("2000", "2002").from("2002").build()
|
||||
).build();
|
||||
// when
|
||||
FacetedPage<ArticleEntity> result = elasticsearchTemplate.queryForPage(searchQuery, ArticleEntity.class);
|
||||
// then
|
||||
assertThat(result.getNumberOfElements(), is(equalTo(4)));
|
||||
|
||||
RangeResult facet = (RangeResult) result.getFacet(facetName);
|
||||
assertThat(facet.getRanges().size(), is(equalTo(3)));
|
||||
|
||||
Range range = facet.getRanges().get(0);
|
||||
assertThat(range.getFrom(), nullValue());
|
||||
assertThat(range.getTo(), is((double) YEAR_2000));
|
||||
assertThat(range.getCount(), is(0L));
|
||||
assertThat(range.getTotal(), is(0.0));
|
||||
|
||||
range = facet.getRanges().get(1);
|
||||
assertThat(range.getFrom(), is((double) YEAR_2000));
|
||||
assertThat(range.getTo(), is((double) YEAR_2002));
|
||||
assertThat(range.getCount(), is(3L));
|
||||
assertThat(range.getTotal(), is(90.0));
|
||||
|
||||
range = facet.getRanges().get(2);
|
||||
assertThat(range.getFrom(), is((double) YEAR_2002));
|
||||
assertThat(range.getTo(), nullValue());
|
||||
assertThat(range.getTo(), is(Double.POSITIVE_INFINITY));
|
||||
assertThat(range.getCount(), is(1L));
|
||||
assertThat(range.getTotal(), is(40.0));
|
||||
}
|
||||
@ -635,4 +595,4 @@ public class ElasticsearchTemplateFacetTests {
|
||||
assertThat(unit.getCount(), is(1L));
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user