You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by da...@apache.org on 2018/11/02 11:16:57 UTC
[48/56] lucene-solr:jira/gradle: Add :solr:contrib:analytics module
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotNode.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotNode.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotNode.java
deleted file mode 100644
index c6c0dc4..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotNode.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Consumer;
-
-import org.apache.solr.analytics.AnalyticsDriver;
-import org.apache.solr.analytics.function.ExpressionCalculator;
-import org.apache.solr.analytics.function.ReductionCollectionManager;
-import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
-import org.apache.solr.analytics.function.reduction.data.ReductionData;
-import org.apache.solr.analytics.util.AnalyticsResponseHeadings;
-import org.apache.solr.analytics.value.StringValueStream;
-
-/**
- * Representation of one layer of a Pivot Facet. A PivotFacet node is individually sortable,
- * and is collected during the streaming phase of the {@link AnalyticsDriver}.
- */
-public abstract class PivotNode<T> extends SortableFacet implements Consumer<String> {
- private StringValueStream expression;
- protected Map<String,T> currentPivot;
-
- public PivotNode(String name, StringValueStream expression) {
- super(name);
- this.expression = expression;
- }
-
- /**
- * Determine which facet values match the current document. Add the {@link ReductionDataCollection}s of the relevant facet values
- * to the targets of the streaming {@link ReductionCollectionManager} so that they are updated with the current document's data.
- */
- public void addFacetValueCollectionTargets(Map<String,T> pivot) {
- currentPivot = pivot;
- expression.streamStrings(this);
- }
-
- /**
- * Import the shard data from a bit-stream for the given pivot, exported by the {@link #exportPivot} method
- * in the each of the collection's shards.
- *
- * @param input The bit-stream to import the data from
- * @param pivot the values for this pivot node and the pivot children (if they exist)
- * @throws IOException if an exception occurs while reading from the {@link DataInput}
- */
- public void importPivot(DataInput input, Map<String,T> pivot) throws IOException {
- int size = input.readInt();
- currentPivot = pivot;
- for (int i = 0; i < size; ++i) {
- importPivotValue(input, input.readUTF());
- }
- }
- /**
- * Import the next pivot value's set of {@link ReductionData} and children's {@link ReductionData} if they exist.
- *
- * @param input the bit-stream to import the reduction data from
- * @param pivotValue the next pivot value
- * @throws IOException if an exception occurs while reading from the input
- */
- protected abstract void importPivotValue(DataInput input, String pivotValue) throws IOException;
-
- /**
- * Export the shard data through a bit-stream for the given pivot,
- * to be imported by the {@link #importPivot} method in the originating shard.
- *
- * @param output The bit-stream to output the data through
- * @param pivot the values for this pivot node and the pivot children (if they exist)
- * @throws IOException if an exception occurs while writing to the {@link DataOutput}
- */
- public void exportPivot(DataOutput output, Map<String,T> pivot) throws IOException {
- output.writeInt(pivot.size());
- for (String pivotValue : pivot.keySet()) {
- output.writeUTF(pivotValue);
- exportPivotValue(output, pivot.get(pivotValue));
- }
- }
- /**
- * Export the given pivot data, containing {@link ReductionData} and pivot children if they exist.
- *
- * @param output the bit-stream to output the reduction data to
- * @param pivotData the next pivot value data
- * @throws IOException if an exception occurs while reading from the input
- */
- protected abstract void exportPivotValue(DataOutput output, T pivotData) throws IOException;
-
- /**
- * Create the response of the facet to be returned in the overall analytics response.
- *
- * @param pivot the pivot to create a response for
- * @return the response of the facet
- */
- public abstract Iterable<Map<String,Object>> getPivotedResponse(Map<String,T> pivot);
-
- /**
- * A pivot node that has no pivot children.
- */
- public static class PivotLeaf extends PivotNode<ReductionDataCollection> {
-
- public PivotLeaf(String name, StringValueStream expression) {
- super(name, expression);
- }
-
- @Override
- public void accept(String pivotValue) {
- ReductionDataCollection collection = currentPivot.get(pivotValue);
- if (collection == null) {
- collection = collectionManager.newDataCollectionTarget();
- currentPivot.put(pivotValue, collection);
- } else {
- collectionManager.addCollectTarget(collection);
- }
- }
-
- @Override
- protected void importPivotValue(DataInput input, String pivotValue) throws IOException {
- ReductionDataCollection dataCollection = currentPivot.get(pivotValue);
- if (dataCollection == null) {
- currentPivot.put(pivotValue, collectionManager.newDataCollectionIO());
- } else {
- collectionManager.prepareReductionDataIO(dataCollection);
- }
- collectionManager.mergeData();
- }
-
- @Override
- protected void exportPivotValue(DataOutput output, ReductionDataCollection pivotData) throws IOException {
- collectionManager.prepareReductionDataIO(pivotData);
- collectionManager.exportData();
- }
-
- @Override
- public Iterable<Map<String,Object>> getPivotedResponse(Map<String,ReductionDataCollection> pivot) {
- final List<FacetBucket> facetResults = new ArrayList<>();
- pivot.forEach((facetVal, dataCol) -> {
- collectionManager.setData(dataCol);
- facetResults.add(new FacetBucket(facetVal,expressionCalculator.getResults()));
- });
-
- Iterable<FacetBucket> facetResultsIter = applyOptions(facetResults);
- final LinkedList<Map<String,Object>> results = new LinkedList<>();
- // Export each expression in the bucket.
- for (FacetBucket bucket : facetResultsIter) {
- Map<String, Object> bucketMap = new HashMap<>();
- bucketMap.put(AnalyticsResponseHeadings.PIVOT_NAME, name);
- bucketMap.put(AnalyticsResponseHeadings.FACET_VALUE, bucket.getFacetValue());
- bucketMap.put(AnalyticsResponseHeadings.RESULTS, bucket.getResults());
- results.add(bucketMap);
- }
- return results;
- }
- }
-
- /**
- * A pivot node that has pivot children.
- */
- public static class PivotBranch<T> extends PivotNode<PivotBranch.PivotDataPair<T>> {
- private final PivotNode<T> childPivot;
- public PivotBranch(String name, StringValueStream expression, PivotNode<T> childPivot) {
- super(name, expression);
- this.childPivot = childPivot;
- }
-
- @Override
- public void setReductionCollectionManager(ReductionCollectionManager collectionManager) {
- super.setReductionCollectionManager(collectionManager);
- childPivot.setReductionCollectionManager(collectionManager);
- }
-
- @Override
- public void setExpressionCalculator(ExpressionCalculator expressionCalculator) {
- super.setExpressionCalculator(expressionCalculator);
- childPivot.setExpressionCalculator(expressionCalculator);
- }
-
- @Override
- public void accept(String pivotValue) {
- PivotDataPair<T> pivotData = currentPivot.get(pivotValue);
- if (pivotData == null) {
- pivotData = new PivotDataPair<>();
- pivotData.childPivots = new HashMap<>();
- pivotData.pivotReduction = collectionManager.newDataCollectionTarget();
- currentPivot.put(pivotValue, pivotData);
- } else {
- collectionManager.addCollectTarget(pivotData.pivotReduction);
- }
- childPivot.addFacetValueCollectionTargets(pivotData.childPivots);
- }
-
- @Override
- protected void importPivotValue(DataInput input, String pivotValue) throws IOException {
- PivotDataPair<T> pivotData = currentPivot.get(pivotValue);
- if (pivotData == null) {
- pivotData = new PivotDataPair<>();
- pivotData.childPivots = new HashMap<>();
- pivotData.pivotReduction = collectionManager.newDataCollectionIO();
- currentPivot.put(pivotValue, pivotData);
- } else {
- collectionManager.prepareReductionDataIO(pivotData.pivotReduction);
- }
- collectionManager.mergeData();
- childPivot.importPivot(input, pivotData.childPivots);
- }
-
- @Override
- protected void exportPivotValue(DataOutput output, PivotDataPair<T> pivotData) throws IOException {
- collectionManager.prepareReductionDataIO(pivotData.pivotReduction);
- collectionManager.exportData();
-
- childPivot.exportPivot(output, pivotData.childPivots);
- }
-
- @Override
- public Iterable<Map<String,Object>> getPivotedResponse(Map<String,PivotDataPair<T>> pivot) {
- final List<FacetBucket> facetResults = new ArrayList<>();
- pivot.forEach((facetVal, dataPair) -> {
- collectionManager.setData(dataPair.pivotReduction);
- facetResults.add(new FacetBucket(facetVal,expressionCalculator.getResults()));
- });
-
- Iterable<FacetBucket> facetResultsIter = applyOptions(facetResults);
- final LinkedList<Map<String,Object>> results = new LinkedList<>();
- // Export each expression in the bucket.
- for (FacetBucket bucket : facetResultsIter) {
- Map<String, Object> bucketMap = new HashMap<>();
- bucketMap.put(AnalyticsResponseHeadings.PIVOT_NAME, name);
- bucketMap.put(AnalyticsResponseHeadings.FACET_VALUE, bucket.getFacetValue());
- bucketMap.put(AnalyticsResponseHeadings.RESULTS, bucket.getResults());
- bucketMap.put(AnalyticsResponseHeadings.PIVOT_CHILDREN, childPivot.getPivotedResponse(pivot.get(bucket.getFacetValue()).childPivots));
- results.add(bucketMap);
- }
- return results;
- }
-
- /**
- * Contains pivot data for {@link PivotNode.PivotBranch} classes.
- */
- protected static class PivotDataPair<T> {
- ReductionDataCollection pivotReduction;
- Map<String,T> childPivots;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
deleted file mode 100644
index f880809..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet;
-
-import java.util.Map;
-import java.util.function.Consumer;
-
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.BooleanClause.Occur;
-import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
-import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.search.Filter;
-import org.apache.solr.search.QParser;
-
-/**
- * A facet that breaks down the data by additional Solr Queries.
- */
-public class QueryFacet extends AbstractSolrQueryFacet {
- private final Map<String,String> queries;
-
- public QueryFacet(String name, Map<String, String> queries) {
- super(name);
- this.queries = queries;
- }
-
- @Override
- public void createFacetValueExecuters(final Filter filter, SolrQueryRequest queryRequest, Consumer<FacetValueQueryExecuter> consumer) {
- queries.forEach( (queryName, query) -> {
- final Query q;
- try {
- q = QParser.getParser(query, queryRequest).getQuery();
- } catch( Exception e ){
- throw new SolrException(ErrorCode.BAD_REQUEST,"Invalid query '"+query+"' in query facet '" + getName() + "'",e);
- }
- // The searcher sends docIds to the QueryFacetAccumulator which forwards
- // them to <code>collectQuery()</code> in this class for collection.
- Query queryQuery = new BooleanQuery.Builder()
- .add(q, Occur.MUST)
- .add(filter, Occur.FILTER)
- .build();
-
- ReductionDataCollection dataCol = collectionManager.newDataCollection();
- reductionData.put(queryName, dataCol);
- consumer.accept(new FacetValueQueryExecuter(dataCol, queryQuery));
- });
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
deleted file mode 100644
index 80e8d21..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet;
-
-import java.util.EnumSet;
-import java.util.List;
-import java.util.function.Consumer;
-
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.BooleanClause.Occur;
-import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
-import org.apache.solr.analytics.util.FacetRangeGenerator;
-import org.apache.solr.analytics.util.FacetRangeGenerator.FacetRange;
-import org.apache.solr.common.params.FacetParams.FacetRangeInclude;
-import org.apache.solr.common.params.FacetParams.FacetRangeOther;
-import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.schema.SchemaField;
-import org.apache.solr.search.Filter;
-
-/**
- * A facet that groups data by a discrete set of ranges.
- */
-public class RangeFacet extends AbstractSolrQueryFacet {
- protected final SchemaField field;
- protected final String start;
- protected final String end;
- protected final List<String> gaps;
- protected boolean hardEnd = false;
- protected EnumSet<FacetRangeInclude> include;
- protected EnumSet<FacetRangeOther> others;
-
- public RangeFacet(String name, SchemaField field, String start, String end, List<String> gaps) {
- super(name);
- this.field = field;
- this.start = start;
- this.end = end;
- this.gaps = gaps;
- include = EnumSet.of(FacetRangeInclude.LOWER);
- others = EnumSet.of(FacetRangeOther.NONE);
- }
-
- @Override
- public void createFacetValueExecuters(final Filter filter, SolrQueryRequest queryRequest, Consumer<FacetValueQueryExecuter> consumer) {
- // Computes the end points of the ranges in the rangeFacet
- final FacetRangeGenerator<? extends Comparable<?>> rec = FacetRangeGenerator.create(this);
- final SchemaField sf = field;
-
- // Create a rangeFacetAccumulator for each range and
- // collect the documents for that range.
- for (FacetRange range : rec.getRanges()) {
- Query q = sf.getType().getRangeQuery(null, sf, range.lower, range.upper, range.includeLower,range.includeUpper);
- // The searcher sends docIds to the RangeFacetAccumulator which forwards
- // them to <code>collectRange()</code> in this class for collection.
- Query rangeQuery = new BooleanQuery.Builder()
- .add(q, Occur.MUST)
- .add(filter, Occur.FILTER)
- .build();
-
- ReductionDataCollection dataCol = collectionManager.newDataCollection();
- reductionData.put(range.toString(), dataCol);
- consumer.accept(new FacetValueQueryExecuter(dataCol, rangeQuery));
- }
- }
-
- public String getStart() {
- return start;
- }
-
- public String getEnd() {
- return end;
- }
-
- public EnumSet<FacetRangeInclude> getInclude() {
- return include;
- }
-
- public void setInclude(EnumSet<FacetRangeInclude> include) {
- this.include = include;
- }
-
- public List<String> getGaps() {
- return gaps;
- }
-
- public boolean isHardEnd() {
- return hardEnd;
- }
-
- public void setHardEnd(boolean hardEnd) {
- this.hardEnd = hardEnd;
- }
-
- public EnumSet<FacetRangeOther> getOthers() {
- return others;
- }
-
- public void setOthers(EnumSet<FacetRangeOther> others) {
- this.others = others;
- }
-
- public SchemaField getField() {
- return field;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/SortableFacet.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/SortableFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/SortableFacet.java
deleted file mode 100644
index ef1e04b..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/SortableFacet.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.solr.analytics.facet.compare.FacetResultsComparator;
-import org.apache.solr.analytics.util.AnalyticsResponseHeadings;
-import org.apache.solr.common.util.NamedList;
-
-import com.google.common.collect.Iterables;
-
-/**
- * A facet that can be sorted by either the facet value or an expression value.
- */
-public abstract class SortableFacet extends AnalyticsFacet {
- protected FacetSortSpecification sort = null;
-
- protected SortableFacet(String name) {
- super(name);
- }
-
- @Override
- public NamedList<Object> createOldResponse() {
- final NamedList<Object> results = new NamedList<>();
- // Export each expression in the bucket.
- for (FacetBucket bucket : getBuckets()) {
- results.add(bucket.getFacetValue(), new NamedList<>(bucket.getResults()));
- }
- return results;
- }
-
- @Override
- public Iterable<Map<String,Object>> createResponse() {
- final LinkedList<Map<String,Object>> results = new LinkedList<>();
- // Export each expression in the bucket.
- for (FacetBucket bucket : getBuckets()) {
- Map<String, Object> bucketMap = new HashMap<>();
- bucketMap.put(AnalyticsResponseHeadings.FACET_VALUE, bucket.getFacetValue());
- bucketMap.put(AnalyticsResponseHeadings.RESULTS, bucket.getResults());
- results.add(bucketMap);
- }
- return results;
- }
-
- private Iterable<FacetBucket> getBuckets() {
- final List<FacetBucket> facetResults = new ArrayList<>();
- reductionData.forEach((facetVal, dataCol) -> {
- collectionManager.setData(dataCol);
- facetResults.add(new FacetBucket(facetVal,expressionCalculator.getResults()));
- });
-
- return applyOptions(facetResults);
- }
-
- /**
- * Apply the sorting options to the given facet results.
- *
- * @param facetResults to apply sorting options to
- * @return the sorted results
- */
- @SuppressWarnings({"unchecked", "rawtypes"})
- protected Iterable<FacetBucket> applyOptions(List<FacetBucket> facetResults) {
- // Sorting the buckets if a sort specification is provided
- if (sort == null || facetResults.isEmpty()) {
- return facetResults;
- }
- Comparator comp = sort.getComparator();
- Collections.sort(facetResults, comp);
-
- Iterable<FacetBucket> facetResultsIter = facetResults;
- // apply the limit
- if (sort.getLimit() > 0) {
- if (sort.getOffset() > 0) {
- facetResultsIter = Iterables.skip(facetResultsIter, sort.getOffset());
- }
- facetResultsIter = Iterables.limit(facetResultsIter, sort.getLimit());
- } else if (sort.getLimit() == 0) {
- return new LinkedList<FacetBucket>();
- }
- return facetResultsIter;
- }
-
- /**
- * Specifies how to sort the buckets of a sortable facet.
- */
- public static class FacetSortSpecification {
- private FacetResultsComparator comparator;
- protected int limit;
- protected int offset;
-
- public FacetSortSpecification(FacetResultsComparator comparator, int limit, int offset) {
- this.comparator = comparator;
- this.limit = limit;
- this.offset = offset;
- }
-
- public FacetResultsComparator getComparator() {
- return comparator;
- }
-
- /**
- * Get the maximum number of buckets to be returned.
- *
- * @return the limit
- */
- public int getLimit() {
- return limit;
- }
- /**
- * Set the maximum number of buckets to be returned.
- *
- * @param limit the maximum number of buckets
- */
- public void setLimit(int limit) {
- this.limit = limit;
- }
-
- /**
- * Get the first bucket to return, has to be used with the {@code limit} option.
- *
- * @return the bucket offset
- */
- public int getOffset() {
- return offset;
- }
- }
-
- public SortableFacet.FacetSortSpecification getSort() {
- return sort;
- }
-
- public void setSort(SortableFacet.FacetSortSpecification sort) {
- this.sort = sort;
- }
-
- public static class FacetBucket {
- private final String facetValue;
- private final Map<String,Object> expressionResults;
-
- public FacetBucket(String facetValue, Map<String,Object> expressionResults) {
- this.facetValue = facetValue;
- this.expressionResults = expressionResults;
- }
-
- public Object getResult(String expression) {
- return expressionResults.get(expression);
- }
-
- public Map<String,Object> getResults() {
- return expressionResults;
- }
-
- public String getFacetValue() {
- return facetValue;
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/StreamingFacet.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/StreamingFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/StreamingFacet.java
deleted file mode 100644
index 6cca041..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/StreamingFacet.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet;
-
-import org.apache.solr.analytics.AnalyticsDriver;
-import org.apache.solr.analytics.function.ReductionCollectionManager;
-import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
-
-/**
- * A facet that is collected during the streaming phase of the {@link AnalyticsDriver}.
- */
-public interface StreamingFacet {
- /**
- * Determine which facet values match the current document. Add the {@link ReductionDataCollection}s of the relevant facet values
- * to the targets of the streaming {@link ReductionCollectionManager} so that they are updated with the current document's data.
- */
- void addFacetValueCollectionTargets();
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/ValueFacet.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/ValueFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/ValueFacet.java
deleted file mode 100644
index b1d84ba..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/ValueFacet.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet;
-
-import java.util.function.Consumer;
-
-import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
-import org.apache.solr.analytics.value.StringValueStream;
-
-/**
- * A facet that breaks up data by the values of a mapping expression or field.
- * The mapping expression must be castable to a {@link StringValueStream}.
- */
-public class ValueFacet extends SortableFacet implements StreamingFacet, Consumer<String> {
- private StringValueStream expression;
-
- public ValueFacet(String name, StringValueStream expression) {
- super(name);
- this.expression = expression;
- }
-
- @Override
- public void addFacetValueCollectionTargets() {
- expression.streamStrings(this);
- }
-
- @Override
- public void accept(String t) {
- ReductionDataCollection collection = reductionData.get(t);
- if (collection == null) {
- collection = collectionManager.newDataCollectionTarget();
- reductionData.put(t, collection);
- } else {
- collectionManager.addCollectTarget(collection);
- }
- }
-
- /**
- * Get the expression used to create the facet values.
- *
- * @return a string mapping expression
- */
- public StringValueStream getExpression() {
- return expression;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/ConstantComparator.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/ConstantComparator.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/ConstantComparator.java
deleted file mode 100644
index ece09f8..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/ConstantComparator.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet.compare;
-
-import org.apache.solr.analytics.facet.SortableFacet.FacetBucket;
-
-/**
- * A results comparator that compares constants.
- */
-public class ConstantComparator extends FacetResultsComparator {
-
- @Override
- public int compare(FacetBucket b1, FacetBucket b2) {
- return 0;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/DelegatingComparator.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/DelegatingComparator.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/DelegatingComparator.java
deleted file mode 100644
index 200e68b..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/DelegatingComparator.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet.compare;
-
-import java.util.Collection;
-
-import org.apache.solr.analytics.facet.SortableFacet.FacetBucket;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
-
-/**
- * A comparator used to sort the facet-value buckets of facet, using the delegate comparator if two values are equal.
- */
-public class DelegatingComparator extends FacetResultsComparator {
- private final Iterable<FacetResultsComparator> comparators;
-
- /**
- * Create a delegating results comparator. This comparator will in succession use the given comparators, continuing if the values are equal.
- * Two buckets are considered equal if and only if all comparators find them equal
- *
- * @param comparators the comparators to use in succession
- */
- private DelegatingComparator(Iterable<FacetResultsComparator> comparators) {
- this.comparators = comparators;
- }
-
- public static FacetResultsComparator joinComparators(Collection<FacetResultsComparator> comparators) throws SolrException {
- if (comparators.size() == 0) {
- throw new SolrException(ErrorCode.BAD_REQUEST,"A sort must have at least 1 comparator criteria.");
- } else if (comparators.size() == 1) {
- return comparators.iterator().next();
- } else {
- return new DelegatingComparator(comparators);
- }
- }
-
- @Override
- public int compare(FacetBucket b1, FacetBucket b2) {
- int val = 0;
- for (FacetResultsComparator comparator : comparators) {
- val = comparator.compare(b1, b2);
- if (val != 0) {
- break;
- }
- }
- return val;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/ExpressionComparator.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/ExpressionComparator.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/ExpressionComparator.java
deleted file mode 100644
index e4c1940..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/ExpressionComparator.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet.compare;
-
-import org.apache.solr.analytics.facet.SortableFacet.FacetBucket;
-
-/**
- * A comparator used to sort the facet-value buckets of facet.
- */
-public class ExpressionComparator<T extends Comparable<T>> extends FacetResultsComparator {
- private final String expression;
-
- /**
- * Create an entry comparator comparing the given expression.
- *
- * @param expression the name of the expression results to compare
- */
- public ExpressionComparator(String expression) {
- this.expression = expression;
- }
-
- @SuppressWarnings("unchecked")
- public int compare(FacetBucket b1, FacetBucket b2) {
- T t1 = (T)b1.getResult(expression);
- T t2 = (T)b2.getResult(expression);
- if (t1 == null || t2 == null) {
- return Boolean.compare(t2 == null, t1 == null) * resultMult;
- } else {
- return t1.compareTo(t2) * resultMult;
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/FacetResultsComparator.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/FacetResultsComparator.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/FacetResultsComparator.java
deleted file mode 100644
index 9303f21..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/FacetResultsComparator.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet.compare;
-
-import java.util.Comparator;
-
-import org.apache.solr.analytics.facet.SortableFacet.FacetBucket;
-
-/**
- * A comparator used to sort the buckets of facet.
- */
-public abstract class FacetResultsComparator implements Comparator<FacetBucket> {
- protected int resultMult;
-
- /**
- * Create a results comparator assuming an ascending ordering.
- */
- public FacetResultsComparator() {
- setDirection(true);
- }
-
- /**
- * Set the order direction for comparison.
- *
- * @param ascending whether to compare using an ascending ordering
- */
- public void setDirection(boolean ascending) {
- this.resultMult = ascending ? 1 : -1;
- }
-
- /**
- * Compare one facet bucket to another.
- *
- * @param b1 the first bucket to compare
- * @param b2 the second bucket to compare
- */
- public abstract int compare(FacetBucket b1, FacetBucket b2);
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/FacetValueComparator.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/FacetValueComparator.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/FacetValueComparator.java
deleted file mode 100644
index a07ac7b..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/FacetValueComparator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.facet.compare;
-
-import org.apache.solr.analytics.facet.SortableFacet.FacetBucket;
-
-/**
- * A results comparator that compares the name of facet value buckets, which is the string value of the facet value.
- */
-public class FacetValueComparator extends FacetResultsComparator {
-
- /**
- * Create a facet value comparator.
- */
- public FacetValueComparator() {
- super();
- }
-
- @Override
- public int compare(FacetBucket b1, FacetBucket b2) {
- return b1.getFacetValue().compareTo(b2.getFacetValue()) * resultMult;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/package-info.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/package-info.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/package-info.java
deleted file mode 100644
index c86ad17..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/compare/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-/**
- * Comparators used to sort the buckets of an analytics facet.
- */
-package org.apache.solr.analytics.facet.compare;
-
-
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/package-info.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/package-info.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/package-info.java
deleted file mode 100644
index 5812e54..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-/**
- * Facets supported by the analytics component.
- */
-package org.apache.solr.analytics.facet;
-
-
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ExpressionCalculator.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ExpressionCalculator.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ExpressionCalculator.java
deleted file mode 100644
index 3c44555..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ExpressionCalculator.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.function;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.solr.analytics.AnalyticsExpression;
-import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
-import org.apache.solr.analytics.util.AnalyticsResponseHeadings;
-import org.apache.solr.common.util.NamedList;
-
-/**
- * A class used to generate results for a list of {@link AnalyticsExpression}s.
- */
-public class ExpressionCalculator {
- private final Iterable<AnalyticsExpression> expressions;
-
- public ExpressionCalculator(Iterable<AnalyticsExpression> expressions) {
- this.expressions = expressions;
- }
-
- /**
- * Calculate results for the list of {@link AnalyticsExpression}s.
- * <p>
- * NOTE: This method can, and is, called multiple times to generate different responses.
- * <br>
- * The results are determined by which {@link ReductionDataCollection} is passed to the {@link ReductionCollectionManager#setData}
- * method of the {@link ReductionCollectionManager} managing the reduction for the list of {@link AnalyticsExpression}s.
- *
- * @return a {@link NamedList} containing the results
- */
- public Map<String,Object> getResults() {
- Map<String,Object> exprVals = new HashMap<>();
- expressions.forEach(expr -> {
- Object obj = expr.toObject();
- if (expr.exists()) {
- exprVals.put(expr.getName(), obj);
- }
- });
- return exprVals;
- }
-
- /**
- * Calculate results for the list of {@link AnalyticsExpression}s and add them to the given response.
- * <p>
- * NOTE: This method can, and is, called multiple times to generate different responses.
- * <br>
- * The results are determined by which {@link ReductionDataCollection} is passed to the {@link ReductionCollectionManager#setData}
- * method of the {@link ReductionCollectionManager} managing the reduction for the list of {@link AnalyticsExpression}s.
- *
- * @param response the response to add the results map to.
- */
- public void addResults(Map<String,Object> response) {
- response.put(AnalyticsResponseHeadings.RESULTS, getResults());
- }
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/MergingReductionCollectionManager.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/MergingReductionCollectionManager.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/MergingReductionCollectionManager.java
deleted file mode 100644
index 1402a76..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/MergingReductionCollectionManager.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.function;
-
-import org.apache.solr.analytics.function.field.AnalyticsField;
-import org.apache.solr.analytics.function.reduction.data.ReductionDataCollector;
-
-/**
- * The {@link ReductionCollectionManager} used for distributed requests.
- */
-public class MergingReductionCollectionManager extends ReductionCollectionManager {
-
- public MergingReductionCollectionManager() {
- super();
- }
-
- public MergingReductionCollectionManager(final ReductionDataCollector<?>[] reductionDataCollectors, final Iterable<AnalyticsField> fields) {
- super(reductionDataCollectors, fields);
- }
-
- @Override
- protected ReductionCollectionManager createNewManager(final ReductionDataCollector<?>[] reductionDataCollectors, final Iterable<AnalyticsField> fields) {
- return new MergingReductionCollectionManager(reductionDataCollectors,fields);
- }
-
- @Override
- public void setData(ReductionDataCollection dataCollection) {
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- reductionDataCollectors[i].setMergedData(dataCollection.dataArr[i]);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ReductionCollectionManager.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ReductionCollectionManager.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ReductionCollectionManager.java
deleted file mode 100644
index b3a178c..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ReductionCollectionManager.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.function;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.lucene.index.LeafReaderContext;
-import org.apache.solr.analytics.function.field.AnalyticsField;
-import org.apache.solr.analytics.function.reduction.data.ReductionData;
-import org.apache.solr.analytics.function.reduction.data.ReductionDataCollector;
-import org.apache.solr.analytics.stream.reservation.ReductionDataReservation;
-import org.apache.solr.analytics.stream.reservation.read.ReductionDataReader;
-import org.apache.solr.analytics.stream.reservation.write.ReductionDataWriter;
-import org.apache.solr.analytics.value.AnalyticsValue;
-
-/**
- * The manager of reduction collection.
- * Contains a group of {@link ReductionDataCollector}s which will be updated together.
- * <p>
- * The manager assumes a non-distributed request. {@link MergingReductionCollectionManager} is used for distributed requests.
- */
-public class ReductionCollectionManager {
- protected final ReductionDataCollector<?>[] reductionDataCollectors;
- private final List<ReductionDataReservation<?,?>> reservations;
-
- private final List<ReductionDataReader<?>> readers;
- private final List<ReductionDataWriter<?>> writers;
-
- private final Iterable<AnalyticsField> fields;
-
- public ReductionCollectionManager() {
- this(new ReductionDataCollector<?>[0], new ArrayList<>(0));
- }
-
- /**
- * Create a Manager to oversee the given {@link ReductionDataCollector}s.
- *
- * @param reductionDataCollectors array of collectors that are collecting over the same set of data
- * @param fields all fields used by the given collectors
- */
- public ReductionCollectionManager(final ReductionDataCollector<?>[] reductionDataCollectors, final Iterable<AnalyticsField> fields) {
- this.reductionDataCollectors = reductionDataCollectors;
- Arrays.sort(reductionDataCollectors, (a,b) -> a.getExpressionStr().compareTo(b.getExpressionStr()));
-
- reservations = new LinkedList<>();
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- reductionDataCollectors[i].submitReservations(reservation -> reservations.add(reservation));
- }
-
- this.fields = fields;
-
- this.readers = new ArrayList<>();
- this.writers = new ArrayList<>();
- }
-
- /**
- * Return whether or not the manager needs collection done, which is false if no collectors are
- * being managed and true if at least one is.
- *
- * @return true if at least one collector is being managed
- */
- public boolean needsCollection() {
- return reductionDataCollectors.length > 0;
- }
-
- /**
- * Merge this collection manager with others.
- *
- * @param reductionManagers the collection managers to merge with
- * @return a collection manager that manages the union of data collectors from this class and the given managers
- */
- public ReductionCollectionManager merge(Iterable<ReductionCollectionManager> reductionManagers) {
- HashMap<String,ReductionDataCollector<?>> mergedCollectors = new HashMap<>();
- HashMap<String,AnalyticsField> mergedFields = new HashMap<>();
-
- for (ReductionDataCollector<?> collector : reductionDataCollectors) {
- mergedCollectors.put(collector.getExpressionStr(), collector);
- }
- fields.forEach( field -> mergedFields.put(field.getExpressionStr(), field) );
-
- reductionManagers.forEach( manager -> {
- for (ReductionDataCollector<?> collector : manager.reductionDataCollectors) {
- mergedCollectors.put(collector.getExpressionStr(), collector);
- }
- manager.fields.forEach( field -> mergedFields.put(field.getExpressionStr(), field) );
- });
- ReductionDataCollector<?>[] collectors = new ReductionDataCollector<?>[mergedCollectors.size()];
- mergedCollectors.values().toArray(collectors);
- return createNewManager(collectors, mergedFields.values());
- }
-
- /**
- * Create an {@link ReductionCollectionManager} to manage the given collectors and fields.
- *
- * @param reductionDataCollectors Reduction collectors
- * @param fields fields used by the reductions
- * @return a collection manager
- */
- protected ReductionCollectionManager createNewManager(final ReductionDataCollector<?>[] reductionDataCollectors, final Iterable<AnalyticsField> fields) {
- return new ReductionCollectionManager(reductionDataCollectors,fields);
- }
-
- /**
- * Get the {@link AnalyticsField}s used in the managed expressions.
- *
- * @return the fields used
- */
- public Iterable<AnalyticsField> getUsedFields() {
- return fields;
- }
-
- /**
- * Set the context of the readers of the used {@link AnalyticsField}s.
- *
- * @param context the reader context
- * @throws IOException if an error occurs while setting the fields' context
- */
- public void doSetNextReader(LeafReaderContext context) throws IOException {
- for (AnalyticsField field : fields) {
- field.doSetNextReader(context);
- }
- }
-
- /**
- * Collect the values from the used {@link AnalyticsField}s.
- *
- * @param doc the document to collect values for
- * @throws IOException if an error occurs during field collection
- */
- public void collect(int doc) throws IOException {
- for (AnalyticsField field : fields) {
- field.collect(doc);
- }
- }
-
- /**
- * Add a {@link ReductionDataCollection} to target while collecting documents.
- * This target is valid until the lasting targets are cleared.
- *
- * @param target data collection to add document data too
- */
- public void addLastingCollectTarget(ReductionDataCollection target) {
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- reductionDataCollectors[i].addLastingCollectTarget(target.dataArr[i]);
- }
- }
- /**
- * Clear lasting collection targets.
- */
- public void clearLastingCollectTargets() {
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- reductionDataCollectors[i].clearLastingCollectTargets();
- }
- }
-
- /**
- * Add a new {@link ReductionDataCollection} to target while collecting the next document.
- * This target is only valid for the next {@link #apply()} call.
- *
- * @return the new data collection being targeted
- */
- public ReductionDataCollection newDataCollectionTarget() {
- ReductionDataCollection newCol = new ReductionDataCollection();
- newCol.dataArr = new ReductionData[reductionDataCollectors.length];
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- newCol.dataArr[i] = reductionDataCollectors[i].newDataTarget();
- }
- return newCol;
- }
- /**
- * Add a {@link ReductionDataCollection} to target while collecting the next document.
- * This target is only valid for the next {@link #apply()} call.
- *
- * @param target data collection to add document data too
- */
- public void addCollectTarget(ReductionDataCollection target) {
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- reductionDataCollectors[i].addCollectTarget(target.dataArr[i]);
- }
- }
-
- /**
- * Apply the values of the collected fields through the expressions' logic to the managed data collectors.
- * This is called after {@link #collect(int)} has been called and the collection targets have been added.
- */
- public void apply() {
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- reductionDataCollectors[i].collectAndApply();;
- }
- }
-
- /**
- * Finalize the reductions with the collected data stored in the parameter.
- * Once the data is finalized, the {@link ReductionFunction}s that use these
- * {@link ReductionDataCollector}s act like regular {@link AnalyticsValue} classes that
- * can be accessed through their {@code get<value-type>} methods.
- *
- * @param dataCollection the collection of reduction data to compute results for
- */
- public void setData(ReductionDataCollection dataCollection) {
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- reductionDataCollectors[i].setData(dataCollection.dataArr[i]);
- }
- }
-
- /**
- * Construct a new data collection holding data for all managed data collectors.
- *
- * @return a new data collection
- */
- public ReductionDataCollection newDataCollection() {
- ReductionDataCollection newCol = new ReductionDataCollection();
- newCol.dataArr = new ReductionData[reductionDataCollectors.length];
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- newCol.dataArr[i] = reductionDataCollectors[i].newData();
- }
- return newCol;
- }
-
- /**
- * Sets the stream of shard data to merge with.
- *
- * @param input the stream of shard data
- */
- public void setShardInput(DataInput input) {
- readers.clear();
- reservations.forEach( resv -> readers.add(resv.createReadStream(input)));
- }
- /**
- * Merge the data from the given shard input stream into the set IO data collectors.
- * Should always be called after {@link #setShardInput(DataInput)} and either {@link #prepareReductionDataIO(ReductionDataCollection)}
- * or {@link #newDataCollectionIO()} have been called.
- *
- * @throws IOException if an error occurs while reading the shard data
- */
- public void mergeData() throws IOException {
- for (ReductionDataReader<?> reader : readers) {
- reader.read();
- }
- }
-
- /**
- * Sets the stream to export shard data to.
- *
- * @param output the stream of shard data
- */
- public void setShardOutput(DataOutput output) {
- writers.clear();
- reservations.forEach( resv -> writers.add(resv.createWriteStream(output)));
- }
- /**
- * Export the data from the set IO data collectors to the given shard output stream.
- * Should always be called after {@link #setShardOutput(DataOutput)} and {@link #prepareReductionDataIO(ReductionDataCollection)}.
- *
- * @throws IOException if an error occurs while writing the shard data
- */
- public void exportData() throws IOException {
- for (ReductionDataWriter<?> writer : writers) {
- writer.write();
- }
- }
-
- /**
- * Set the given data collection to be used for either merging or exporting
- *
- * @param col collection to export from or merge to
- */
- public void prepareReductionDataIO(ReductionDataCollection col) {
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- reductionDataCollectors[i].dataIO(col.dataArr[i]);
- }
- }
-
- /**
- * Create a new {@link ReductionDataCollection} to merge to or export from.
- * Mainly used for creating facet value collectors when merging shard data.
- *
- * @return the new data collection created
- */
- public ReductionDataCollection newDataCollectionIO() {
- ReductionDataCollection newCol = new ReductionDataCollection();
- newCol.dataArr = new ReductionData[reductionDataCollectors.length];
- for (int i = 0; i < reductionDataCollectors.length; i++) {
- newCol.dataArr[i] = reductionDataCollectors[i].newDataIO();
- }
- return newCol;
- }
-
- /**
- * Holds the collection of {@link ReductionData} that will be updated together.
- *
- * For example each grouping will have a separate {@link ReductionDataCollection}, and
- * ungrouped expressions will have their own as well.
- */
- public static class ReductionDataCollection{
- public ReductionData[] dataArr;
- }
-}
-
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ReductionFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ReductionFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ReductionFunction.java
deleted file mode 100644
index fea01c2..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/ReductionFunction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.function;
-
-import java.util.function.UnaryOperator;
-
-import org.apache.solr.analytics.function.reduction.data.ReductionDataCollector;
-import org.apache.solr.analytics.value.AnalyticsValue;
-
-/**
- * A function that reduces the values of a mapping expression, field or constant.
- */
-public interface ReductionFunction extends AnalyticsValue {
-
- /**
- * Syncs the data collectors with shared versions across the entire Analytics Request
- * so that as little data as possible is sent across shards.
- *
- * @param sync a function that takes in a {@link ReductionDataCollector} and returns a shared version
- */
- void synchronizeDataCollectors(UnaryOperator<ReductionDataCollector<?>> sync);
-}
-
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/AnalyticsField.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/AnalyticsField.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/AnalyticsField.java
deleted file mode 100644
index e0bbb4b..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/AnalyticsField.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.function.field;
-
-import java.io.IOException;
-
-import org.apache.lucene.index.LeafReaderContext;
-import org.apache.solr.analytics.value.AnalyticsValueStream;
-
-/**
- * An analytics wrapper for Solr Fields.
- *
- * Currently only fields with Doc Values enabled can be used in Analytics queries.
- */
-public abstract class AnalyticsField implements AnalyticsValueStream {
- protected static final int initialArrayLength = 20;
-
- protected final String fieldName;
-
- protected AnalyticsField(String fieldName) {
- this.fieldName = fieldName;
- }
-
- @Override
- public String getExpressionStr() {
- return fieldName;
- }
-
- @Override
- public String getName() {
- return fieldName;
- }
-
- @Override
- public ExpressionType getExpressionType() {
- return ExpressionType.FIELD;
- }
-
- @Override
- public AnalyticsValueStream convertToConstant() {
- return this;
- }
-
- /**
- * Set the segment reader context
- *
- * @param context segment context
- * @throws IOException if an error occurs while loading the leaf reader
- */
- public abstract void doSetNextReader(LeafReaderContext context) throws IOException;
-
- /**
- * Collect the value(s) of the wrapped field for the given document, and store the value.
- *
- * @param doc ID of the document to collect
- * @throws IOException if an error occurs while reading the document.
- */
- public abstract void collect(int doc) throws IOException;
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/BooleanField.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/BooleanField.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/BooleanField.java
deleted file mode 100644
index 650bc36..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/BooleanField.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.function.field;
-
-import java.io.IOException;
-import java.util.function.Consumer;
-
-import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.index.SortedDocValues;
-import org.apache.lucene.util.BytesRef;
-import org.apache.solr.analytics.facet.compare.ExpressionComparator;
-import org.apache.solr.analytics.util.function.BooleanConsumer;
-import org.apache.solr.analytics.value.BooleanValue.CastingBooleanValue;
-import org.apache.solr.schema.BoolField;
-
-/**
- * An analytics wrapper for a single-valued {@link BoolField} with DocValues enabled.
- */
-public class BooleanField extends AnalyticsField implements CastingBooleanValue {
- private SortedDocValues docValues;
- boolean value;
- boolean exists;
- int trueOrd;
-
- public BooleanField(String fieldName) {
- super(fieldName);
- }
-
- @Override
- public void doSetNextReader(LeafReaderContext context) throws IOException {
- docValues = DocValues.getSorted(context.reader(), fieldName);
-
- // figure out what ord maps to true
- int numOrds = docValues.getValueCount();
- // if no values in the segment, default trueOrd to something other then -1 (missing)
- int trueOrd = -2;
- for (int i=0; i<numOrds; i++) {
- final BytesRef br = docValues.lookupOrd(i);
- if (br.length==1 && br.bytes[br.offset]=='T') {
- trueOrd = i;
- break;
- }
- }
-
- this.trueOrd = trueOrd;
- }
-
- @Override
- public void collect(int doc) throws IOException {
- exists = docValues.advanceExact(doc);
- if (exists) {
- value = trueOrd == docValues.ordValue();
- }
- }
-
- @Override
- public boolean getBoolean() {
- return value;
- }
- @Override
- public String getString() {
- return exists ? Boolean.toString(value) : null;
- }
- @Override
- public Object getObject() {
- return exists ? value : null;
- }
- @Override
- public boolean exists() {
- return exists;
- }
-
- @Override
- public void streamBooleans(BooleanConsumer cons) {
- if (exists) {
- cons.accept(value);
- }
- }
- @Override
- public void streamStrings(Consumer<String> cons) {
- if (exists) {
- cons.accept(Boolean.toString(value));
- }
- }
- @Override
- public void streamObjects(Consumer<Object> cons) {
- if (exists) {
- cons.accept(value);
- }
- }
-
- @Override
- public ExpressionComparator<Boolean> getObjectComparator(String expression) {
- return new ExpressionComparator<>(expression);
- }
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/BooleanMultiField.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/BooleanMultiField.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/BooleanMultiField.java
deleted file mode 100644
index e4eecd3..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/BooleanMultiField.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.function.field;
-
-import java.io.IOException;
-import java.util.function.Consumer;
-
-import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.index.SortedSetDocValues;
-import org.apache.lucene.util.BytesRef;
-import org.apache.solr.analytics.util.function.BooleanConsumer;
-import org.apache.solr.analytics.value.BooleanValueStream.CastingBooleanValueStream;
-import org.apache.solr.schema.BoolField;
-
-
-/**
- * An analytics wrapper for a multi-valued {@link BoolField} with DocValues enabled.
- */
-public class BooleanMultiField extends AnalyticsField implements CastingBooleanValueStream {
- private SortedSetDocValues docValues;
- private int count;
- private boolean[] values;
-
- private int trueOrd;
-
- public BooleanMultiField(String fieldName) {
- super(fieldName);
- count = 0;
- values = new boolean[initialArrayLength];
- }
-
- @Override
- public void doSetNextReader(LeafReaderContext context) throws IOException {
- docValues = DocValues.getSortedSet(context.reader(), fieldName);
-
- // figure out what ord maps to true
- long numOrds = docValues.getValueCount();
- // if no values in the segment, default trueOrd to something other then -1 (missing)
- int trueOrd = -2;
- for (int i=0; i<numOrds; i++) {
- final BytesRef br = docValues.lookupOrd(i);
- if (br.length==1 && br.bytes[br.offset]=='T') {
- trueOrd = i;
- break;
- }
- }
-
- this.trueOrd = trueOrd;
- }
- @Override
- public void collect(int doc) throws IOException {
- count = 0;
- if (docValues.advanceExact(doc)) {
- int term;
- while ((term = (int)docValues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
- if (count == values.length) {
- resizeValues();
- }
- values[count++] = term == trueOrd;
- }
- }
- }
-
- private void resizeValues() {
- boolean[] newValues = new boolean[values.length*2];
- for (int i = 0; i < count; ++i) {
- newValues[i] = values[i];
- }
- values = newValues;
- }
-
- @Override
- public void streamBooleans(BooleanConsumer cons) {
- for (int i = 0; i < count; ++i) {
- cons.accept(values[i]);
- }
- }
- @Override
- public void streamStrings(Consumer<String> cons) {
- streamBooleans(value -> cons.accept(Boolean.toString(value)));
- }
- @Override
- public void streamObjects(Consumer<Object> cons) {
- streamBooleans(value -> cons.accept(value));
- }
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateField.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateField.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateField.java
deleted file mode 100644
index 88e71bc..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateField.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.function.field;
-
-import java.io.IOException;
-import java.time.Instant;
-import java.util.Date;
-import java.util.function.Consumer;
-import java.util.function.LongConsumer;
-
-import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.index.NumericDocValues;
-import org.apache.solr.analytics.facet.compare.ExpressionComparator;
-import org.apache.solr.analytics.value.DateValue.CastingDateValue;
-import org.apache.solr.schema.DatePointField;
-import org.apache.solr.schema.TrieDateField;
-
-/**
- * An analytics wrapper for a single-valued {@link TrieDateField} or {@link DatePointField} with DocValues enabled.
- */
-public class DateField extends AnalyticsField implements CastingDateValue {
- private NumericDocValues docValues;
- private long value;
- private boolean exists;
-
- public DateField(String fieldName) {
- super(fieldName);
- }
-
- @Override
- public void doSetNextReader(LeafReaderContext context) throws IOException {
- docValues = DocValues.getNumeric(context.reader(), fieldName);
- }
-
- @Override
- public void collect(int doc) throws IOException {
- exists = docValues.advanceExact(doc);
- if (exists) {
- value = docValues.longValue();
- }
- }
-
- @Override
- public long getLong() {
- return value;
- }
- @Override
- public Date getDate() {
- return exists ? new Date(value) : null;
- }
- @Override
- public String getString() {
- return exists ? Instant.ofEpochMilli(value).toString() : null;
- }
- @Override
- public Object getObject() {
- return exists ? value : null;
- }
- @Override
- public boolean exists() {
- return exists;
- }
-
- @Override
- public void streamLongs(LongConsumer cons) {
- if (exists) {
- cons.accept(value);
- }
- }
- @Override
- public void streamDates(Consumer<Date> cons) {
- if (exists) {
- cons.accept(new Date(value));
- }
- }
- @Override
- public void streamStrings(Consumer<String> cons) {
- if (exists) {
- cons.accept(Instant.ofEpochMilli(value).toString());
- }
- }
- @Override
- public void streamObjects(Consumer<Object> cons) {
- if (exists) {
- cons.accept(new Date(value));
- }
- }
-
- @Override
- public ExpressionComparator<Date> getObjectComparator(String expression) {
- return new ExpressionComparator<>(expression);
- }
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateMultiPointField.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateMultiPointField.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateMultiPointField.java
deleted file mode 100644
index a1560ef..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateMultiPointField.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.function.field;
-
-import java.time.Instant;
-import java.util.Date;
-import java.util.function.Consumer;
-
-import org.apache.solr.analytics.value.DateValueStream.CastingDateValueStream;
-import org.apache.solr.schema.DatePointField;
-
-/**
- * An analytics wrapper for a multi-valued {@link DatePointField} with DocValues enabled.
- */
-public class DateMultiPointField extends LongMultiPointField implements CastingDateValueStream {
-
- public DateMultiPointField(String fieldName) {
- super(fieldName);
- }
-
- @Override
- public void streamDates(Consumer<Date> cons) {
- streamLongs(value -> cons.accept(new Date(value)));
- }
- @Override
- public void streamStrings(Consumer<String> cons) {
- streamLongs(value -> cons.accept(Instant.ofEpochMilli(value).toString()));
- }
- @Override
- public void streamObjects(Consumer<Object> cons) {
- streamLongs(value -> cons.accept(new Date(value)));
- }
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateMultiTrieField.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateMultiTrieField.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateMultiTrieField.java
deleted file mode 100644
index cdc77f4..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/field/DateMultiTrieField.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.analytics.function.field;
-
-import java.time.Instant;
-import java.util.Date;
-import java.util.function.Consumer;
-
-import org.apache.solr.analytics.value.DateValueStream.CastingDateValueStream;
-import org.apache.solr.schema.TrieDateField;
-
-/**
- * An analytics wrapper for a multi-valued {@link TrieDateField} with DocValues enabled.
- * @deprecated Trie fields are deprecated as of Solr 7.0
- */
-@Deprecated
-public class DateMultiTrieField extends LongMultiTrieField implements CastingDateValueStream {
-
- public DateMultiTrieField(String fieldName) {
- super(fieldName);
- }
-
- @Override
- public void streamDates(Consumer<Date> cons) {
- streamLongs(value -> cons.accept(new Date(value)));
- }
- @Override
- public void streamStrings(Consumer<String> cons) {
- streamLongs(value -> cons.accept(Instant.ofEpochMilli(value).toString()));
- }
- @Override
- public void streamObjects(Consumer<Object> cons) {
- streamLongs(value -> cons.accept(new Date(value)));
- }
-}