diff --git a/pom.xml b/pom.xml index 7f3ecad..eb4330e 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ - 0.90.5 + 0.90.7 diff --git a/src/main/java/crate/elasticsearch/facet/distinct/DistinctDateHistogramFacetParser.java b/src/main/java/crate/elasticsearch/facet/distinct/DistinctDateHistogramFacetParser.java index f71f0a6..a1b9548 100644 --- a/src/main/java/crate/elasticsearch/facet/distinct/DistinctDateHistogramFacetParser.java +++ b/src/main/java/crate/elasticsearch/facet/distinct/DistinctDateHistogramFacetParser.java @@ -3,14 +3,13 @@ import org.elasticsearch.common.collect.ImmutableMap; import org.elasticsearch.common.collect.MapBuilder; import org.elasticsearch.common.component.AbstractComponent; +import org.elasticsearch.common.hppc.ObjectIntOpenHashMap; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.joda.time.Chronology; import org.elasticsearch.common.joda.time.DateTimeField; import org.elasticsearch.common.joda.time.DateTimeZone; import org.elasticsearch.common.joda.time.MutableDateTime; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.trove.impl.Constants; -import org.elasticsearch.common.trove.map.hash.TObjectIntHashMap; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.fielddata.IndexNumericFieldData; @@ -34,7 +33,7 @@ public class DistinctDateHistogramFacetParser extends AbstractComponent implements FacetParser { private final ImmutableMap dateFieldParsers; - private final TObjectIntHashMap rounding = new TObjectIntHashMap(Constants.DEFAULT_CAPACITY, Constants.DEFAULT_LOAD_FACTOR, -1); + private final ObjectIntOpenHashMap rounding = new ObjectIntOpenHashMap(); @Inject public DistinctDateHistogramFacetParser(Settings settings) { diff --git a/src/main/java/crate/elasticsearch/facet/distinct/InternalDistinctDateHistogramFacet.java b/src/main/java/crate/elasticsearch/facet/distinct/InternalDistinctDateHistogramFacet.java index 5d0f257..48e577e 100644 --- a/src/main/java/crate/elasticsearch/facet/distinct/InternalDistinctDateHistogramFacet.java +++ b/src/main/java/crate/elasticsearch/facet/distinct/InternalDistinctDateHistogramFacet.java @@ -1,8 +1,9 @@ package crate.elasticsearch.facet.distinct; -import org.elasticsearch.cache.recycler.CacheRecycler; +import org.elasticsearch.common.hppc.LongObjectOpenHashMap; +import org.elasticsearch.common.logging.ESLogger; +import org.elasticsearch.common.logging.ESLoggerFactory; import org.elasticsearch.common.recycler.Recycler; -import org.elasticsearch.common.trove.ExtTLongObjectHashMap; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; import org.elasticsearch.search.facet.Facet; @@ -110,6 +111,7 @@ static final class Fields { @Override public Facet reduce(ReduceContext context) { List facets = context.facets(); + if (facets.size() == 1) { // we need to sort it InternalDistinctDateHistogramFacet internalFacet = (InternalDistinctDateHistogramFacet) facets.get(0); @@ -118,22 +120,26 @@ public Facet reduce(ReduceContext context) { return internalFacet; } - Recycler.V> map = context.cacheRecycler().longObjectMap(-1); + Recycler.V> map = context.cacheRecycler().longObjectMap(-1); for (Facet facet : facets) { + InternalDistinctDateHistogramFacet histoFacet = (InternalDistinctDateHistogramFacet) facet; for (DistinctEntry fullEntry : histoFacet.entries) { - DistinctEntry current = map.v().get(fullEntry.getTime()); - if (current != null) { - current.getValues().addAll(fullEntry.getValues()); - } else { - map.v().put(fullEntry.getTime(), fullEntry); + if(fullEntry != null){ + DistinctEntry current = map.v().get(fullEntry.getTime()); + if (current != null) { + current.getValues().addAll(fullEntry.getValues()); + } else { + map.v().put(fullEntry.getTime(), fullEntry); + } } + } } // sort - Object[] values = map.v().internalValues(); + Object[] values = map.v().values; Arrays.sort(values, (Comparator) comparatorType.comparator()); List ordered = new ArrayList(map.v().size()); for (int i = 0; i < map.v().size(); i++) { diff --git a/src/main/java/crate/elasticsearch/facet/distinct/LongDistinctDateHistogramFacetExecutor.java b/src/main/java/crate/elasticsearch/facet/distinct/LongDistinctDateHistogramFacetExecutor.java index 8c12c04..69a418f 100644 --- a/src/main/java/crate/elasticsearch/facet/distinct/LongDistinctDateHistogramFacetExecutor.java +++ b/src/main/java/crate/elasticsearch/facet/distinct/LongDistinctDateHistogramFacetExecutor.java @@ -2,9 +2,9 @@ import org.apache.lucene.index.AtomicReaderContext; import org.elasticsearch.cache.recycler.CacheRecycler; +import org.elasticsearch.common.hppc.LongObjectOpenHashMap; import org.elasticsearch.common.joda.time.MutableDateTime; import org.elasticsearch.common.recycler.Recycler; -import org.elasticsearch.common.trove.ExtTLongObjectHashMap; import org.elasticsearch.index.fielddata.IndexNumericFieldData; import org.elasticsearch.index.fielddata.LongValues; import org.elasticsearch.search.facet.FacetExecutor; @@ -14,6 +14,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; /** * Collect the distinct values per time interval. @@ -27,7 +28,7 @@ public class LongDistinctDateHistogramFacetExecutor extends FacetExecutor { private MutableDateTime dateTime; private final long interval; private final DateHistogramFacet.ComparatorType comparatorType; - final Recycler.V> entries; + final Recycler.V> entries; private final CacheRecycler cacheRecycler; public LongDistinctDateHistogramFacetExecutor(IndexNumericFieldData keyIndexFieldData, @@ -50,7 +51,7 @@ public Collector collector() { @Override public InternalFacet buildFacet(String facetName) { - ArrayList entries1 = new ArrayList(entries.v().valueCollection()); + ArrayList entries1 = new ArrayList(Arrays.asList(entries.v().values)); entries.release(); return new LongInternalDistinctDateHistogramFacet(facetName, comparatorType, entries1); @@ -100,11 +101,11 @@ public static class DateHistogramProc extends LongFacetAggregatorBase { LongValues valueValues; private final long interval; private MutableDateTime dateTime; - final ExtTLongObjectHashMap entries; + final LongObjectOpenHashMap entries; final ValueAggregator valueAggregator = new ValueAggregator(); - public DateHistogramProc(ExtTLongObjectHashMap entries, MutableDateTime dateTime, long interval) { + public DateHistogramProc(LongObjectOpenHashMap entries, MutableDateTime dateTime, long interval) { this.dateTime = dateTime; this.entries = entries; this.interval = interval; @@ -116,11 +117,11 @@ public DateHistogramProc(ExtTLongObjectHashMap 0) { + for(Integer i = 0 ; i < totalDocumentEntries ; i++) { + dateTime.setMillis(values.nextValue()); onValue(docId, dateTime); total++; } diff --git a/src/main/java/crate/elasticsearch/facet/distinct/LongInternalDistinctDateHistogramFacet.java b/src/main/java/crate/elasticsearch/facet/distinct/LongInternalDistinctDateHistogramFacet.java index 6913b65..0b71fdc 100644 --- a/src/main/java/crate/elasticsearch/facet/distinct/LongInternalDistinctDateHistogramFacet.java +++ b/src/main/java/crate/elasticsearch/facet/distinct/LongInternalDistinctDateHistogramFacet.java @@ -4,12 +4,13 @@ import org.elasticsearch.common.bytes.HashedBytesArray; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.common.trove.ExtTLongObjectHashMap; import org.elasticsearch.search.facet.Facet; import java.io.IOException; -import java.util.*; -import org.elasticsearch.cache.recycler.CacheRecycler; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; public class LongInternalDistinctDateHistogramFacet extends InternalDistinctDateHistogramFacet { diff --git a/src/main/java/crate/elasticsearch/facet/distinct/StringDistinctDateHistogramFacetExecutor.java b/src/main/java/crate/elasticsearch/facet/distinct/StringDistinctDateHistogramFacetExecutor.java index b68e80b..5f1c4c4 100644 --- a/src/main/java/crate/elasticsearch/facet/distinct/StringDistinctDateHistogramFacetExecutor.java +++ b/src/main/java/crate/elasticsearch/facet/distinct/StringDistinctDateHistogramFacetExecutor.java @@ -3,9 +3,9 @@ import org.apache.lucene.index.AtomicReaderContext; import org.apache.lucene.util.BytesRef; import org.elasticsearch.cache.recycler.CacheRecycler; +import org.elasticsearch.common.hppc.LongObjectOpenHashMap; import org.elasticsearch.common.joda.time.MutableDateTime; import org.elasticsearch.common.recycler.Recycler; -import org.elasticsearch.common.trove.ExtTLongObjectHashMap; import org.elasticsearch.index.fielddata.BytesValues; import org.elasticsearch.index.fielddata.LongValues; import org.elasticsearch.index.fielddata.plain.PackedArrayIndexFieldData; @@ -17,6 +17,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; /** * Collect the distinct values per time interval. @@ -30,7 +31,7 @@ public class StringDistinctDateHistogramFacetExecutor extends FacetExecutor { private MutableDateTime dateTime; private final long interval; private final DateHistogramFacet.ComparatorType comparatorType; - final Recycler.V> entries; + final Recycler.V> entries; public StringDistinctDateHistogramFacetExecutor(PackedArrayIndexFieldData keyIndexFieldData, PagedBytesIndexFieldData distinctIndexFieldData, @@ -51,7 +52,7 @@ public Collector collector() { @Override public InternalFacet buildFacet(String facetName) { - ArrayList entries1 = new ArrayList(entries.v().valueCollection()); + ArrayList entries1 = new ArrayList(Arrays.asList(entries.v().values)); entries.release(); return new StringInternalDistinctDateHistogramFacet(facetName, comparatorType, entries1); } @@ -73,7 +74,7 @@ public Collector() { @Override public void setNextReader(AtomicReaderContext context) throws IOException { keyValues = keyIndexFieldData.load(context).getLongValues(); - histoProc.valueValues = distinctIndexFieldData.load(context).getBytesValues(); + histoProc.valueValues = distinctIndexFieldData.load(context).getBytesValues(false); } @Override @@ -98,11 +99,11 @@ public static class DateHistogramProc { BytesValues.WithOrdinals valueValues; private final long interval; private MutableDateTime dateTime; - final Recycler.V> entries; + final Recycler.V> entries; final ValueAggregator valueAggregator = new ValueAggregator(); - public DateHistogramProc(Recycler.V> entries, MutableDateTime dateTime, long interval) { + public DateHistogramProc(Recycler.V> entries, MutableDateTime dateTime, long interval) { this.dateTime = dateTime; this.entries = entries; this.interval = interval; @@ -112,10 +113,10 @@ public DateHistogramProc(Recycler.V 0) { + for(Integer i = 0 ; i < totalDocumentEntries ; i++) { + dateTime.setMillis(values.nextValue()); onValue(docId, dateTime); total++; } diff --git a/src/main/java/crate/elasticsearch/facet/distinct/StringInternalDistinctDateHistogramFacet.java b/src/main/java/crate/elasticsearch/facet/distinct/StringInternalDistinctDateHistogramFacet.java index 0f43ca5..1989a9c 100644 --- a/src/main/java/crate/elasticsearch/facet/distinct/StringInternalDistinctDateHistogramFacet.java +++ b/src/main/java/crate/elasticsearch/facet/distinct/StringInternalDistinctDateHistogramFacet.java @@ -5,7 +5,6 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.recycler.Recycler; -import org.elasticsearch.common.trove.ExtTLongObjectHashMap; import org.elasticsearch.search.facet.Facet; import org.elasticsearch.search.facet.InternalFacet; diff --git a/src/main/java/crate/elasticsearch/facet/latest/InternalLatestFacet.java b/src/main/java/crate/elasticsearch/facet/latest/InternalLatestFacet.java index a854511..b9bcd40 100644 --- a/src/main/java/crate/elasticsearch/facet/latest/InternalLatestFacet.java +++ b/src/main/java/crate/elasticsearch/facet/latest/InternalLatestFacet.java @@ -3,10 +3,10 @@ import org.apache.lucene.util.PriorityQueue; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.bytes.HashedBytesArray; +import org.elasticsearch.common.hppc.LongObjectOpenHashMap; +import org.elasticsearch.common.hppc.procedures.LongObjectProcedure; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.common.trove.map.TLongObjectMap; -import org.elasticsearch.common.trove.procedure.TLongObjectProcedure; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; import org.elasticsearch.search.facet.Facet; @@ -89,16 +89,15 @@ protected boolean lessThan(Entry a, Entry b) { } } - public void insert(TLongObjectMap entries) { + public void insert(LongObjectOpenHashMap entries) { if (queue == null) { this.queue = new EntryPriorityQueue(start + size); } - entries.forEachEntry(new TLongObjectProcedure() { + entries.forEach(new LongObjectProcedure() { @Override - public boolean execute(long key, Entry entry) { + public void apply(long key, Entry entry) { entry.key = key; queue.insertWithOverflow(entry); - return true; } }); } diff --git a/src/main/java/crate/elasticsearch/facet/latest/LatestFacetExecutor.java b/src/main/java/crate/elasticsearch/facet/latest/LatestFacetExecutor.java index 7579db3..9e46a77 100644 --- a/src/main/java/crate/elasticsearch/facet/latest/LatestFacetExecutor.java +++ b/src/main/java/crate/elasticsearch/facet/latest/LatestFacetExecutor.java @@ -2,8 +2,8 @@ import org.apache.lucene.index.AtomicReaderContext; import org.elasticsearch.cache.recycler.CacheRecycler; +import org.elasticsearch.common.hppc.LongObjectOpenHashMap; import org.elasticsearch.common.recycler.Recycler; -import org.elasticsearch.common.trove.ExtTLongObjectHashMap; import org.elasticsearch.index.fielddata.FieldDataType; import org.elasticsearch.index.fielddata.IndexNumericFieldData; import org.elasticsearch.index.fielddata.LongValues; @@ -27,7 +27,7 @@ public class LatestFacetExecutor extends FacetExecutor { protected int size = 10; protected int start = 0; - final Recycler.V> entries; + final Recycler.V> entries; public LatestFacetExecutor(IndexNumericFieldData keyField, IndexNumericFieldData valueField, IndexNumericFieldData tsField, int size, int start, CacheRecycler cacheRecycler) { @@ -80,20 +80,22 @@ public void setNextReader(AtomicReaderContext context) throws IOException { public static class Aggregator extends LongFacetAggregatorBase { - final ExtTLongObjectHashMap entries; + final LongObjectOpenHashMap entries; LongValues valueValues; LongValues tsValues; - public Aggregator(ExtTLongObjectHashMap entries){ + public Aggregator(LongObjectOpenHashMap entries){ this.entries = entries; } @Override public void onValue(int docId, long key) { InternalLatestFacet.Entry entry = entries.get(key); - long ts = tsValues.getValue(docId); + tsValues.setDocument(docId); + long ts = tsValues.nextValue(); if (entry == null || entry.ts < ts) { - int value = (int)valueValues.getValue(docId); + valueValues.setDocument(docId); + int value = (int)valueValues.nextValue(); if (entry == null) { entry = new InternalLatestFacet.Entry(ts, value); entries.put(key, entry);