开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 0

jlcoding/RediSearch

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (73)
标签 (134)
master
LLAPI-scorer
cxx1.6-phase1-1
RPCounter
php-redisearch-2.0
feature-search-json
ft.add-to-__index
omer_search_separate_from_rejson
sort-intersect
2.0
add-"Pipeline-creation-time"
remove-CriteriaTester
Owen_skiplist_wo_range_test
tests-with-.so
issue-1832
return-fast-on-empty-stopwordlist
ci.benchmarks
ck-centos8
ck-arch-support
disable-test
v2.0.6+geo-llapi
v1.6.15
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v1.99.6
v1.8.3
v1.6.14
v1.99.5
v1.99.3
v1.99.2
v1.99.1
v1.99.0
v1.8.1
v1.8.0
v1.6.13
master
分支 (73)
标签 (134)
master
LLAPI-scorer
cxx1.6-phase1-1
RPCounter
php-redisearch-2.0
feature-search-json
ft.add-to-__index
omer_search_separate_from_rejson
sort-intersect
2.0
add-"Pipeline-creation-time"
remove-CriteriaTester
Owen_skiplist_wo_range_test
tests-with-.so
issue-1832
return-fast-on-empty-stopwordlist
ci.benchmarks
ck-centos8
ck-arch-support
disable-test
v2.0.6+geo-llapi
v1.6.15
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v1.99.6
v1.8.3
v1.6.14
v1.99.5
v1.99.3
v1.99.2
v1.99.1
v1.99.0
v1.8.1
v1.8.0
v1.6.13
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (73)
标签 (134)
master
LLAPI-scorer
cxx1.6-phase1-1
RPCounter
php-redisearch-2.0
feature-search-json
ft.add-to-__index
omer_search_separate_from_rejson
sort-intersect
2.0
add-"Pipeline-creation-time"
remove-CriteriaTester
Owen_skiplist_wo_range_test
tests-with-.so
issue-1832
return-fast-on-empty-stopwordlist
ci.benchmarks
ck-centos8
ck-arch-support
disable-test
v2.0.6+geo-llapi
v1.6.15
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v1.99.6
v1.8.3
v1.6.14
v1.99.5
v1.99.3
v1.99.2
v1.99.1
v1.99.0
v1.8.1
v1.8.0
v1.6.13
RediSearch
/
tests
/
cpptests
/
test_cpp_range.cpp
RediSearch
/
tests
/
cpptests
/
test_cpp_range.cpp
test_cpp_range.cpp 4.71 KB
一键复制 编辑 原始数据 按行查看 历史
#include <gtest/gtest.h>
#include "numeric_index.h"
#include <stdio.h>
// #include "time_sample.h"
#include "index.h"
#include "rmutil/alloc.h"
extern "C" {
// declaration for an internal function implemented in numeric_index.c
IndexIterator *createNumericIterator(const IndexSpec* sp, NumericRangeTree *t, const NumericFilter *f);
}
// Helper so we get the same pseudo-random numbers
// in tests across environments
unsigned prng_seed = 1337;
#define PRNG_MOD 30980347
unsigned prng() {
prng_seed = (prng_seed * prng_seed) % PRNG_MOD;
return prng_seed;
}
class RangeTest : public ::testing::Test {};
TEST_F(RangeTest, testRangeTree) {
NumericRangeTree *t = NewNumericRangeTree();
ASSERT_TRUE(t != NULL);
for (size_t i = 0; i < 50000; i++) {
NumericRangeTree_Add(t, i + 1, (double)(1 + prng() % 5000));
}
ASSERT_EQ(t->numRanges, 16);
ASSERT_EQ(t->numEntries, 50000);
struct {
double min;
double max;
} rngs[] = {{0, 100}, {10, 1000}, {2500, 3500}, {0, 5000}, {4999, 4999}, {0, 0}};
for (int r = 0; rngs[r].min || rngs[r].max; r++) {
Vector *v = NumericRangeTree_Find(t, rngs[r].min, rngs[r].max);
ASSERT_TRUE(Vector_Size(v) > 0);
// printf("Got %d ranges for %f..%f...\n", Vector_Size(v), rngs[r].min, rngs[r].max);
for (int i = 0; i < Vector_Size(v); i++) {
NumericRange *l;
Vector_Get(v, i, &l);
ASSERT_TRUE(l);
// printf("%f...%f\n", l->minVal, l->maxVal);
ASSERT_FALSE(l->minVal > rngs[r].max);
ASSERT_FALSE(l->maxVal < rngs[r].min);
}
Vector_Free(v);
}
NumericRangeTree_Free(t);
}
TEST_F(RangeTest, testRangeIterator) {
NumericRangeTree *t = NewNumericRangeTree();
ASSERT_TRUE(t != NULL);
const size_t N = 100000;
std::vector<double> lookup;
std::vector<uint8_t> matched;
lookup.resize(N + 1);
matched.resize(N + 1);
for (size_t i = 0; i < N; i++) {
t_docId docId = i + 1;
double value = (double)(1 + prng() % (N / 5));
lookup[docId] = value;
// printf("Adding %d > %f\n", docId, value);
NumericRangeTree_Add(t, docId, value);
}
for (size_t i = 0; i < 5; i++) {
double min = (double)(1 + prng() % (N / 5));
double max = (double)(1 + prng() % (N / 5));
memset(&matched[0], 0, sizeof(uint8_t) * (N + 1));
NumericFilter *flt = NewNumericFilter(std::min(min, max), std::max(min, max), 1, 1);
// count the number of elements in the range
size_t count = 0;
for (size_t i = 1; i <= N; i++) {
if (NumericFilter_Match(flt, lookup[i])) {
matched[i] = 1;
count++;
}
}
// printf("Testing range %f..%f, should have %d docs\n", min, max, count);
IndexIterator *it = createNumericIterator(NULL, t, flt);
int xcount = 0;
RSIndexResult *res = NULL;
while (IITER_HAS_NEXT(it)) {
int rc = it->Read(it->ctx, &res);
if (rc == INDEXREAD_EOF) {
break;
}
ASSERT_EQ(matched[res->docId], 1);
if (res->type == RSResultType_Union) {
res = res->agg.children[0];
}
matched[res->docId] = (uint8_t)2;
// printf("rc: %d docId: %d, n %f lookup %f, flt %f..%f\n", rc, res->docId, res->num.value,
// lookup[res->docId], flt->min, flt->max);
ASSERT_EQ(res->num.value, lookup[res->docId]);
ASSERT_TRUE(NumericFilter_Match(flt, lookup[res->docId]));
ASSERT_EQ(res->type, RSResultType_Numeric);
// ASSERT_EQUAL(res->agg.typeMask, RSResultType_Virtual);
ASSERT_TRUE(!RSIndexResult_HasOffsets(res));
ASSERT_TRUE(!RSIndexResult_IsAggregate(res));
ASSERT_TRUE(res->docId > 0);
ASSERT_EQ(res->fieldMask, RS_FIELDMASK_ALL);
xcount++;
}
for (int i = 1; i <= N; i++) {
if (matched[i] == 1) {
printf("Miss: %d\n", i);
}
}
// printf("The iterator returned %d elements\n", xcount);
ASSERT_EQ(xcount, count);
it->Free(it);
NumericFilter_Free(flt);
}
ASSERT_EQ(t->numRanges, 14);
ASSERT_EQ(t->numEntries, N);
NumericRangeTree_Free(t);
}
// int benchmarkNumericRangeTree() {
// NumericRangeTree *t = NewNumericRangeTree();
// int count = 1;
// for (int i = 0; i < 100000; i++) {
// count += NumericRangeTree_Add(t, i, (double)(rand() % 500000));
// }
// // printf("created %d range leaves\n", count);
// TIME_SAMPLE_RUN_LOOP(1000, {
// Vector *v = NumericRangeTree_Find(t, 1000, 20000);
// // printf("%d\n", v->top);
// Vector_Free(v);
// });
// TimeSample ts;
// NumericFilter *flt = NewNumericFilter(1000, 50000, 0, 0);
// IndexIterator *it = createNumericIterator(t, flt);
// ASSERT(it->HasNext(it->ctx));
// // ASSERT_EQUAL(it->Len(it->ctx), N);
// count = 0;
// RSIndexResult *res = NULL;
// it->Free(it);
// NumericRangeTree_Free(t);
// NumericFilter_Free(flt);
// return 0;
// }
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

暂无描述
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/msgcode/RediSearch.git
git@gitee.com:msgcode/RediSearch.git
msgcode
RediSearch
RediSearch
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /