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);

Reply via email to