This is an automated email from the ASF dual-hosted git repository.

jianliangqi pushed a commit to branch clucene
in repository https://gitbox.apache.org/repos/asf/doris-thirdparty.git


The following commit(s) were added to refs/heads/clucene by this push:
     new 97d40fdf [feature](invert index) add the reader buffer as a parameter 
(#137)
97d40fdf is described below

commit 97d40fdf9477580672060c5684bc5ec09fb97bd3
Author: zzzxl <[email protected]>
AuthorDate: Tue Nov 21 14:06:12 2023 +0800

    [feature](invert index) add the reader buffer as a parameter (#137)
---
 src/core/CLucene/index/DirectoryIndexReader.cpp | 20 ++++++++++++++++++--
 src/core/CLucene/index/DirectoryIndexReader.h   |  4 ++++
 src/core/CLucene/index/IndexReader.cpp          |  5 +++++
 src/core/CLucene/index/IndexReader.h            |  3 +++
 src/core/CLucene/index/MultiSegmentReader.cpp   |  4 ++--
 src/core/CLucene/index/SegmentReader.cpp        |  5 +++++
 src/core/CLucene/index/_MultiSegmentReader.h    |  3 ++-
 src/core/CLucene/index/_SegmentHeader.h         |  2 ++
 8 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/src/core/CLucene/index/DirectoryIndexReader.cpp 
b/src/core/CLucene/index/DirectoryIndexReader.cpp
index 15020eea..d3acb6f1 100644
--- a/src/core/CLucene/index/DirectoryIndexReader.cpp
+++ b/src/core/CLucene/index/DirectoryIndexReader.cpp
@@ -4,6 +4,7 @@
 * Distributable under the terms of either the Apache License (Version 2.0) or
 * the GNU Lesser General Public License, as specified in the COPYING file.
 
------------------------------------------------------------------------------*/
+#include <cstdint>
 #include "CLucene/_ApiHeader.h"
 #include "DirectoryIndexReader.h"
 #include "_IndexFileDeleter.h"
@@ -141,6 +142,8 @@ CL_NS_DEF(index)
   class DirectoryIndexReader::FindSegmentsFile_Open: public 
SegmentInfos::FindSegmentsFile<DirectoryIndexReader*>{
     bool closeDirectory;
     IndexDeletionPolicy* deletionPolicy;
+    int32_t readBufferSize_ = -1;
+
        protected:
     DirectoryIndexReader* doBody(const char* segmentFileName) {
 
@@ -150,9 +153,9 @@ CL_NS_DEF(index)
       DirectoryIndexReader* reader;
 
       if (infos->size() == 1) {          // index is optimized
-        reader = SegmentReader::get(infos, infos->info(0), closeDirectory);
+        reader = SegmentReader::get(infos, infos->info(0), readBufferSize_, 
closeDirectory);
       } else {
-        reader = _CLNEW MultiSegmentReader(directory, infos, closeDirectory);
+        reader = _CLNEW MultiSegmentReader(directory, infos, closeDirectory, 
readBufferSize_);
       }
       reader->setDeletionPolicy(deletionPolicy);
       return reader;
@@ -165,6 +168,12 @@ CL_NS_DEF(index)
       this->closeDirectory = closeDirectory;
       this->deletionPolicy = deletionPolicy;
     }
+
+    FindSegmentsFile_Open(bool closeDirectory, int32_t readBufferSize,
+                          IndexDeletionPolicy* deletionPolicy, 
CL_NS(store)::Directory* dir)
+            : FindSegmentsFile_Open(closeDirectory, deletionPolicy, dir) {
+      readBufferSize_ = readBufferSize;
+    }
   };
 
   DirectoryIndexReader* DirectoryIndexReader::open(Directory* __directory, 
bool closeDirectory, IndexDeletionPolicy* deletionPolicy) {
@@ -172,6 +181,13 @@ CL_NS_DEF(index)
     return runner.run();
   }
 
+  DirectoryIndexReader* DirectoryIndexReader::open(Directory* __directory, 
int32_t readBufferSize,
+                                                   bool closeDirectory,
+                                                   IndexDeletionPolicy* 
deletionPolicy) {
+    DirectoryIndexReader::FindSegmentsFile_Open runner(closeDirectory, 
readBufferSize,
+                                                       deletionPolicy, 
__directory);
+    return runner.run();
+  }
 
   class DirectoryIndexReader::FindSegmentsFile_Reopen: public 
SegmentInfos::FindSegmentsFile<DirectoryIndexReader*>{
     bool closeDirectory;
diff --git a/src/core/CLucene/index/DirectoryIndexReader.h 
b/src/core/CLucene/index/DirectoryIndexReader.h
index 62d31508..e614f3d3 100644
--- a/src/core/CLucene/index/DirectoryIndexReader.h
+++ b/src/core/CLucene/index/DirectoryIndexReader.h
@@ -7,6 +7,7 @@
 #ifndef _lucene_index_DirectoryIndexReader_
 #define _lucene_index_DirectoryIndexReader_
 
+#include <cstdint>
 #include "IndexReader.h"
 
 CL_CLASS_DEF(store,LuceneLock)
@@ -84,6 +85,9 @@ public:
 
   CLUCENE_LOCAL_DECL DirectoryIndexReader(CL_NS(store)::Directory* directory, 
SegmentInfos* segmentInfos, bool closeDirectory);
   CLUCENE_LOCAL_DECL static DirectoryIndexReader* 
open(CL_NS(store)::Directory* directory, bool closeDirectory, 
IndexDeletionPolicy* deletionPolicy);
+  CLUCENE_LOCAL_DECL static DirectoryIndexReader* 
open(CL_NS(store)::Directory* directory,
+                                                       int32_t readBufferSize, 
bool closeDirectory,
+                                                       IndexDeletionPolicy* 
deletionPolicy);
 
   IndexReader* reopen();
 
diff --git a/src/core/CLucene/index/IndexReader.cpp 
b/src/core/CLucene/index/IndexReader.cpp
index 0fb2fe59..a63b8d1a 100644
--- a/src/core/CLucene/index/IndexReader.cpp
+++ b/src/core/CLucene/index/IndexReader.cpp
@@ -126,6 +126,11 @@ CL_NS_DEF(index)
        return DirectoryIndexReader::open(directory, closeDirectory, 
deletionPolicy);
   }
 
+  IndexReader* IndexReader::open(Directory* directory, int32_t readBufferSize, 
bool closeDirectory,
+                                 IndexDeletionPolicy* deletionPolicy) {
+       return DirectoryIndexReader::open(directory, readBufferSize, 
closeDirectory, deletionPolicy);
+  }
+
   IndexReader* IndexReader::reopen(){
          _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support 
reopen().");
   }
diff --git a/src/core/CLucene/index/IndexReader.h 
b/src/core/CLucene/index/IndexReader.h
index defb6e75..59e937df 100644
--- a/src/core/CLucene/index/IndexReader.h
+++ b/src/core/CLucene/index/IndexReader.h
@@ -156,6 +156,9 @@ public:
    */
   static IndexReader* open(CL_NS(store)::Directory* directory, bool 
closeDirectoryOnCleanup=false, IndexDeletionPolicy* deletionPolicy=NULL);
 
+  static IndexReader* open(CL_NS(store)::Directory* directory, int32_t 
readBufferSize,
+                           bool closeDirectoryOnCleanup = false,
+                           IndexDeletionPolicy* deletionPolicy = NULL);
 
   /**
    * Refreshes an IndexReader if the index has changed since this instance
diff --git a/src/core/CLucene/index/MultiSegmentReader.cpp 
b/src/core/CLucene/index/MultiSegmentReader.cpp
index ef006c20..495acaa4 100644
--- a/src/core/CLucene/index/MultiSegmentReader.cpp
+++ b/src/core/CLucene/index/MultiSegmentReader.cpp
@@ -45,7 +45,7 @@ void 
MultiSegmentReader::initialize(CL_NS(util)::ArrayBase<IndexReader*>* _subRe
   starts[subReaders->length] = _maxDoc;
 }
 
-MultiSegmentReader::MultiSegmentReader(CL_NS(store)::Directory* directory, 
SegmentInfos* sis, bool closeDirectory):
+MultiSegmentReader::MultiSegmentReader(CL_NS(store)::Directory* directory, 
SegmentInfos* sis, bool closeDirectory, int32_t readBufferSize):
   DirectoryIndexReader(directory,sis,closeDirectory),
   normsCache(NormsCacheType(true,true))
 {
@@ -57,7 +57,7 @@ 
MultiSegmentReader::MultiSegmentReader(CL_NS(store)::Directory* directory, Segme
   ArrayBase<IndexReader*>* readers = _CLNEW 
ObjectArray<IndexReader>(sis->size());
   for (int32_t i = (int32_t)sis->size()-1; i >= 0; i--) {
     try {
-      readers->values[i] = SegmentReader::get(sis->info(i));
+      readers->values[i] = SegmentReader::get(sis->info(i), readBufferSize);
     } catch(CLuceneError& err) {
       if ( err.number() != CL_ERR_IO ) throw err;
 
diff --git a/src/core/CLucene/index/SegmentReader.cpp 
b/src/core/CLucene/index/SegmentReader.cpp
index e0ec0c14..f7741a9f 100644
--- a/src/core/CLucene/index/SegmentReader.cpp
+++ b/src/core/CLucene/index/SegmentReader.cpp
@@ -239,6 +239,11 @@ SegmentReader *SegmentReader::get(SegmentInfos *sis, 
SegmentInfo *si,
                                   bool closeDir) {
     return get(si->dir, si, sis, closeDir, true, 
BufferedIndexInput::BUFFER_SIZE, false);
 }
+
+SegmentReader *SegmentReader::get(SegmentInfos *sis, SegmentInfo *si, int32_t 
readBufferSize, bool closeDir) {
+    return get(si->dir, si, sis, closeDir, true, readBufferSize, false);
+}
+
 /**
    * @throws CorruptIndexException if the index is corrupt
    * @throws IOException if there is a low-level IO error
diff --git a/src/core/CLucene/index/_MultiSegmentReader.h 
b/src/core/CLucene/index/_MultiSegmentReader.h
index 46b32caa..52f700d1 100644
--- a/src/core/CLucene/index/_MultiSegmentReader.h
+++ b/src/core/CLucene/index/_MultiSegmentReader.h
@@ -8,6 +8,7 @@
 #define _lucene_index_MultiSegmentReader
 
 
+#include <cstdint>
 #include "DirectoryIndexReader.h"
 #include "IndexReader.h"
 CL_CLASS_DEF(document,Document)
@@ -58,7 +59,7 @@ protected:
 public:
 
   /** Construct reading the named set of readers. */
-  MultiSegmentReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, 
bool closeDirectory);
+  MultiSegmentReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, 
bool closeDirectory, int32_t readBufferSize = -1);
 
   /** This contructor is only used for {@link #reopen()} */
   CLUCENE_LOCAL_DECL MultiSegmentReader(
diff --git a/src/core/CLucene/index/_SegmentHeader.h 
b/src/core/CLucene/index/_SegmentHeader.h
index e177f576..bf988a2f 100644
--- a/src/core/CLucene/index/_SegmentHeader.h
+++ b/src/core/CLucene/index/_SegmentHeader.h
@@ -367,6 +367,8 @@ public:
    */
   static SegmentReader* get(SegmentInfos* sis, SegmentInfo* si, bool closeDir);
 
+  static SegmentReader *get(SegmentInfos *sis, SegmentInfo *si, int32_t 
readBufferSize, bool closeDir);
+
   /**
    * @throws CorruptIndexException if the index is corrupt
    * @throws IOException if there is a low-level IO error


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to