This is an automated email from the ASF dual-hosted git repository.
kangrong pushed a commit to branch f_index_dev
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 1c9e779f195f4132afb61d0eb5f0f7068cd697ce
Author: kr11 <3095717866.com>
AuthorDate: Tue May 11 02:55:47 2021 +0800
add non-overlap for ELB
---
.../org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java | 11 +++++++++++
.../java/org/apache/iotdb/db/index/it/ELBIndexReadIT.java | 2 +-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java
b/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java
index 55cc014..580069b 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java
@@ -270,6 +270,7 @@ public class ELBIndex extends IoTDBIndex {
List<Filter> filterList = queryByIndex(struct, (SubMatchIndexUsability)
iIndexUsable);
List<DistSeries> res = new ArrayList<>();
try {
+ long lastTimestamp = -1;
for (Filter timeFilter : filterList) {
long featureTotal = 0;
long cpuTotal = 0;
@@ -300,12 +301,22 @@ public class ELBIndex extends IoTDBIndex {
while (featureExtractor.hasNext()) {
featureExtractor.processNext();
TVListPointer p = featureExtractor.getCurrent_L2_AlignedSequence();
+ long pStartTime = p.tvList.getTime(p.offset);
+ if (pStartTime <= lastTimestamp) {
+ continue;
+ }
long cpuStart = System.nanoTime();
if (struct.elb.exactDistanceCalc(p.tvList, p.offset)) {
TVList tvList =
TVListAllocator.getInstance().allocate(tsDataType);
TVList.append(tvList, p.tvList, p.offset, p.length);
PartialPath showPath =
indexSeries.concatNode(String.valueOf(tvList.getMinTime()));
res.add(new DistSeries(0, tvList, showPath));
+ // add no-overlap
+ final boolean noOverlap = true;
+ if (noOverlap) {
+ lastTimestamp = tvList.getLastTime();
+ }
+ // end no-overlap
}
cpuTotal += System.nanoTime() - cpuStart;
}
diff --git
a/server/src/test/java/org/apache/iotdb/db/index/it/ELBIndexReadIT.java
b/server/src/test/java/org/apache/iotdb/db/index/it/ELBIndexReadIT.java
index 59f85d6..07105ac 100644
--- a/server/src/test/java/org/apache/iotdb/db/index/it/ELBIndexReadIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/index/it/ELBIndexReadIT.java
@@ -182,7 +182,7 @@ public class ELBIndexReadIT {
String querySQL =
"SELECT speed.* FROM root.wind1.azq01 WHERE Speed "
+ String.format("CONTAIN (%s) WITH TOLERANCE 100000 ",
getArrayRange(170, 200, 10))
- + String.format("CONCAT (%s) WITH TOLERANCE 50 ",
getArrayRange(250, 300, 10))
+ + String.format("CONCAT (%s) WITH TOLERANCE 200 ",
getArrayRange(250, 300, 10))
+ String.format("CONCAT (%s) WITH TOLERANCE 100000 ",
getArrayRange(400, 430, 10));
System.out.println(querySQL);
boolean hasIndex = statement.execute(querySQL);