From 2375f6c944b6e0ea0aa398edaa96df8e438756d5 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Sun, 19 Dec 2021 15:37:53 +0800 Subject: [PATCH] update cache search --- include/libs/index/index.h | 1 - source/libs/index/inc/indexInt.h | 10 +++-- source/libs/index/src/index.c | 64 +++++++++++++++++++++++++++----- 3 files changed, 62 insertions(+), 13 deletions(-) diff --git a/include/libs/index/index.h b/include/libs/index/index.h index 3ca8d10603..3d4dbade58 100644 --- a/include/libs/index/index.h +++ b/include/libs/index/index.h @@ -71,7 +71,6 @@ void indexMultiTermDestroy(SIndexMultiTerm *terms); SIndexOpts *indexOptsCreate(); void indexOptsDestroy(SIndexOpts *opts); - /* * @param: * @param: diff --git a/source/libs/index/inc/indexInt.h b/source/libs/index/inc/indexInt.h index 7e017049e8..6205d68c43 100644 --- a/source/libs/index/inc/indexInt.h +++ b/source/libs/index/inc/indexInt.h @@ -48,9 +48,13 @@ struct SIndex { struct SIndexOpts { #ifdef USE_LUCENE void *opts; -#endif - int32_t numOfItermLimit; - int8_t mergeInterval; +#endif + +#ifdef USE_INVERTED_INDEX + int32_t cacheSize; // MB + // add cache module later +#endif + }; struct SIndexMultiTermQuery { diff --git a/source/libs/index/src/index.c b/source/libs/index/src/index.c index 08c59d8d43..1bc12d2b79 100644 --- a/source/libs/index/src/index.c +++ b/source/libs/index/src/index.c @@ -16,6 +16,7 @@ #include "index.h" #include "indexInt.h" #include "index_cache.h" +#include "tdef.h" #ifdef USE_LUCENE #include "lucene++/Lucene_c.h" @@ -30,13 +31,13 @@ typedef struct SIdxColInfo { static pthread_once_t isInit = PTHREAD_ONCE_INIT; static void indexInit(); -static int indexMergeCacheIntoTindex(struct SIndex *sIdx) { - if (sIdx == NULL) { - return -1; - } - indexWarn("suid %" PRIu64 " merge cache into tindex", sIdx->suid); - return 0; -} + +static int indexTermSearch(SIndex *sIdx, SIndexTermQuery *term, SArray **result); +static int indexMergeCacheIntoTindex(SIndex *sIdx); + +static void indexInterResultsDestroy(SArray *results); +static int indexMergeFinalResults(SArray *interResults, EIndexOperatorType oType, SArray *finalResult); + int indexOpen(SIndexOpts *opts, const char *path, SIndex **index) { pthread_once(&isInit, indexInit); SIndex *sIdx = calloc(1, sizeof(SIndex)); @@ -49,8 +50,8 @@ int indexOpen(SIndexOpts *opts, const char *path, SIndex **index) { sIdx->cache = (void*)indexCacheCreate(); sIdx->tindex = NULL; - sIdx->colObj = taosHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); - sIdx->colId = 1; + sIdx->colObj = taosHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); + sIdx->colId = 1; sIdx->cVersion = 1; pthread_mutex_init(&sIdx->mtx, NULL); @@ -162,12 +163,25 @@ int indexSearch(SIndex *index, SIndexMultiTermQuery *multiQuerys, SArray *result #endif #ifdef USE_INVERTED_INDEX + EIndexOperatorType opera = multiQuerys->opera; // relation of querys + SArray *interResults = taosArrayInit(4, POINTER_BYTES); + int nQuery = taosArrayGetSize(multiQuerys->query); + for (size_t i = 0; i < nQuery; i++) { + SIndexTermQuery *qTerm = taosArrayGet(multiQuerys->query, i); + SArray *tResult = NULL; + indexTermSearch(index, qTerm, &tResult); + taosArrayPush(interResults, (void *)&tResult); + } + indexMergeFinalResults(interResults, opera, result); + indexInterResultsDestroy(interResults); + #endif return 1; } + int indexDelete(SIndex *index, SIndexMultiTermQuery *query) { #ifdef USE_INVERTED_INDEX #endif @@ -259,3 +273,35 @@ void indexMultiTermDestroy(SIndexMultiTerm *terms) { void indexInit() { //do nothing } +static int indexTermSearch(SIndex *sIdx, SIndexTermQuery *term, SArray **result) { + +} +static void indexInterResultsDestroy(SArray *results) { + if (results == NULL) { return; } + + size_t sz = taosArrayGetSize(results); + for (size_t i = 0; i < sz; i++) { + SArray *p = taosArrayGetP(results, i); + taosArrayDestroy(p); + } + taosArrayDestroy(results); + +} +static int indexMergeFinalResults(SArray *interResults, EIndexOperatorType oType, SArray *fResults) { + if (oType == MUST) { + + // tag1 condition && tag2 condition + } else if (oType == SHOULD) { + // tag1 condistion || tag2 condition + } else if (oType == NOT) { + // not use currently + } + return 0; +} +static int indexMergeCacheIntoTindex(SIndex *sIdx) { + if (sIdx == NULL) { + return -1; + } + indexWarn("suid %" PRIu64 " merge cache into tindex", sIdx->suid); + return 0; +}