diff --git a/src/gausskernel/storage/access/datavec/bm25build.cpp b/src/gausskernel/storage/access/datavec/bm25build.cpp index 700bc222b..dc3f763f8 100644 --- a/src/gausskernel/storage/access/datavec/bm25build.cpp +++ b/src/gausskernel/storage/access/datavec/bm25build.cpp @@ -243,6 +243,7 @@ static void InsertItemToTokenMetaList(Relation index, BM25PageLocationInfo &buck securec_check_c(rc, "\0", "\0"); tokenMeta->tokenId = BM25AllocateTokenId(index); tokenData.tokenId = tokenMeta->tokenId; + tokenMeta->hashValue = tokenData.hashValue; tokenMeta->maxScore = 0; tokenMeta->postingBlkno = InvalidBlockNumber; tokenMeta->lastInsertBlkno = InvalidBlockNumber; diff --git a/src/gausskernel/storage/access/datavec/bm25utils.cpp b/src/gausskernel/storage/access/datavec/bm25utils.cpp index cdd06dd75..68e42d59c 100644 --- a/src/gausskernel/storage/access/datavec/bm25utils.cpp +++ b/src/gausskernel/storage/access/datavec/bm25utils.cpp @@ -332,7 +332,8 @@ bool FindTokenMeta(BM25TokenData &tokenData, BM25PageLocationInfo &tokenMetaLoca OffsetNumber maxoffno = PageGetMaxOffsetNumber(page); for (OffsetNumber offno = FirstOffsetNumber; offno <= maxoffno; offno = OffsetNumberNext(offno)) { BM25TokenMetaPage tokenMeta = (BM25TokenMetaPage)PageGetItem(page, PageGetItemId(page, offno)); - if (strncmp(tokenMeta->token, tokenData.tokenValue, BM25_MAX_TOKEN_LEN - 1) == 0) { + if ((tokenMeta->hashValue == tokenData.hashValue) && + (strncmp(tokenMeta->token, tokenData.tokenValue, BM25_MAX_TOKEN_LEN - 1) == 0)) { tokenMetaLocation.blkno = BufferGetBlockNumber(buf); tokenMetaLocation.offno = offno; return true; diff --git a/src/include/access/datavec/bm25.h b/src/include/access/datavec/bm25.h index 84a0c1c30..479f823ed 100644 --- a/src/include/access/datavec/bm25.h +++ b/src/include/access/datavec/bm25.h @@ -159,6 +159,7 @@ typedef BM25HashBucketItem *BM25HashBucketPage; typedef struct BM25TokenMetaItem { uint32 tokenId; + uint32 hashValue; uint32 docCount; BlockNumber postingBlkno; BlockNumber lastInsertBlkno;