Skip to content

Commit c2fa44e

Browse files
committed
rename, update benches
1 parent 40bc027 commit c2fa44e

File tree

3 files changed

+61
-56
lines changed

3 files changed

+61
-56
lines changed

fastfield_codecs/benches/bench.rs

+41-32
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ extern crate test;
44

55
#[cfg(test)]
66
mod tests {
7-
use std::iter;
8-
use std::sync::Arc;
7+
use std::{ops::RangeInclusive, sync::Arc};
98

109
use common::OwnedBytes;
1110
use fastfield_codecs::*;
@@ -71,29 +70,24 @@ mod tests {
7170
});
7271
}
7372

74-
fn get_exp_data() -> Vec<u64> {
73+
const FIFTY_PERCENT_RANGE: RangeInclusive<u64> = 1..=50;
74+
const SINGLE_ITEM: u64 = 90;
75+
const SINGLE_ITEM_RANGE: RangeInclusive<u64> = 90..=90;
76+
const ONE_PERCENT_ITEM_RANGE: RangeInclusive<u64> = 49..=49;
77+
fn get_data_50percent_item() -> Vec<u128> {
78+
let mut rng = StdRng::from_seed([1u8; 32]);
79+
7580
let mut data = vec![];
76-
for i in 0..100 {
77-
let num = i * i;
78-
data.extend(iter::repeat(i as u64).take(num));
81+
for _ in 0..300_000 {
82+
let val = rng.gen_range(1..=100);
83+
data.push(val);
7984
}
80-
data.shuffle(&mut StdRng::from_seed([1u8; 32]));
81-
82-
assert_eq!(data.len(), 328350);
85+
data.push(SINGLE_ITEM);
8386

84-
// lengt = 328350
87+
data.shuffle(&mut rng);
88+
let data = data.iter().map(|el| *el as u128).collect::<Vec<_>>();
8589
data
8690
}
87-
88-
fn get_data_50percent_item() -> (u128, u128, Vec<u128>) {
89-
let mut permutation = get_exp_data();
90-
let major_item = 20;
91-
let minor_item = 10;
92-
permutation.extend(iter::repeat(major_item).take(permutation.len()));
93-
permutation.shuffle(&mut StdRng::from_seed([1u8; 32]));
94-
let permutation = permutation.iter().map(|el| *el as u128).collect::<Vec<_>>();
95-
(major_item as u128, minor_item as u128, permutation)
96-
}
9791
fn get_u128_column_random() -> Arc<dyn Column<u128>> {
9892
let permutation = generate_random();
9993
let permutation = permutation.iter().map(|el| *el as u128).collect::<Vec<_>>();
@@ -111,15 +105,31 @@ mod tests {
111105
// U64 RANGE START
112106
#[bench]
113107
fn bench_intfastfield_getrange_u64_50percent_hit(b: &mut Bencher) {
114-
let (major_item, _minor_item, data) = get_data_50percent_item();
115-
let major_item = major_item as u64;
108+
let data = get_data_50percent_item();
109+
let data = data.iter().map(|el| *el as u64).collect::<Vec<_>>();
110+
let column: Arc<dyn Column<u64>> = serialize_and_load(&data);
111+
112+
b.iter(|| {
113+
let mut positions = Vec::new();
114+
column.get_docids_for_value_range(
115+
FIFTY_PERCENT_RANGE,
116+
0..data.len() as u32,
117+
&mut positions,
118+
);
119+
positions
120+
});
121+
}
122+
123+
#[bench]
124+
fn bench_intfastfield_getrange_u64_1percent_hit(b: &mut Bencher) {
125+
let data = get_data_50percent_item();
116126
let data = data.iter().map(|el| *el as u64).collect::<Vec<_>>();
117127
let column: Arc<dyn Column<u64>> = serialize_and_load(&data);
118128

119129
b.iter(|| {
120130
let mut positions = Vec::new();
121131
column.get_docids_for_value_range(
122-
major_item..=major_item,
132+
ONE_PERCENT_ITEM_RANGE,
123133
0..data.len() as u32,
124134
&mut positions,
125135
);
@@ -129,15 +139,14 @@ mod tests {
129139

130140
#[bench]
131141
fn bench_intfastfield_getrange_u64_single_hit(b: &mut Bencher) {
132-
let (_major_item, minor_item, data) = get_data_50percent_item();
133-
let minor_item = minor_item as u64;
142+
let data = get_data_50percent_item();
134143
let data = data.iter().map(|el| *el as u64).collect::<Vec<_>>();
135144
let column: Arc<dyn Column<u64>> = serialize_and_load(&data);
136145

137146
b.iter(|| {
138147
let mut positions = Vec::new();
139148
column.get_docids_for_value_range(
140-
minor_item..=minor_item,
149+
SINGLE_ITEM_RANGE,
141150
0..data.len() as u32,
142151
&mut positions,
143152
);
@@ -147,7 +156,7 @@ mod tests {
147156

148157
#[bench]
149158
fn bench_intfastfield_getrange_u64_hit_all(b: &mut Bencher) {
150-
let (_major_item, _minor_item, data) = get_data_50percent_item();
159+
let data = get_data_50percent_item();
151160
let data = data.iter().map(|el| *el as u64).collect::<Vec<_>>();
152161
let column: Arc<dyn Column<u64>> = serialize_and_load(&data);
153162

@@ -162,13 +171,13 @@ mod tests {
162171
// U128 RANGE START
163172
#[bench]
164173
fn bench_intfastfield_getrange_u128_50percent_hit(b: &mut Bencher) {
165-
let (major_item, _minor_item, data) = get_data_50percent_item();
174+
let data = get_data_50percent_item();
166175
let column = get_u128_column_from_data(&data);
167176

168177
b.iter(|| {
169178
let mut positions = Vec::new();
170179
column.get_docids_for_value_range(
171-
major_item..=major_item,
180+
*FIFTY_PERCENT_RANGE.start() as u128..=*FIFTY_PERCENT_RANGE.end() as u128,
172181
0..data.len() as u32,
173182
&mut positions,
174183
);
@@ -178,13 +187,13 @@ mod tests {
178187

179188
#[bench]
180189
fn bench_intfastfield_getrange_u128_single_hit(b: &mut Bencher) {
181-
let (_major_item, minor_item, data) = get_data_50percent_item();
190+
let data = get_data_50percent_item();
182191
let column = get_u128_column_from_data(&data);
183192

184193
b.iter(|| {
185194
let mut positions = Vec::new();
186195
column.get_docids_for_value_range(
187-
minor_item..=minor_item,
196+
*SINGLE_ITEM_RANGE.start() as u128..=*SINGLE_ITEM_RANGE.end() as u128,
188197
0..data.len() as u32,
189198
&mut positions,
190199
);
@@ -194,7 +203,7 @@ mod tests {
194203

195204
#[bench]
196205
fn bench_intfastfield_getrange_u128_hit_all(b: &mut Bencher) {
197-
let (_major_item, _minor_item, data) = get_data_50percent_item();
206+
let data = get_data_50percent_item();
198207
let column = get_u128_column_from_data(&data);
199208

200209
b.iter(|| {

fastfield_codecs/src/column.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ impl<'a, T: Copy + PartialOrd + Send + Sync> Column<T> for VecColumn<'a, T> {
136136
}
137137

138138
impl<'a, T: Copy + PartialOrd + Default, V> From<&'a V> for VecColumn<'a, T>
139-
where V: AsRef<[T]> + ?Sized
139+
where
140+
V: AsRef<[T]> + ?Sized,
140141
{
141142
fn from(values: &'a V) -> Self {
142143
let values = values.as_ref();
@@ -244,7 +245,8 @@ where
244245
pub struct IterColumn<T>(T);
245246

246247
impl<T> From<T> for IterColumn<T>
247-
where T: Iterator + Clone + ExactSizeIterator
248+
where
249+
T: Iterator + Clone + ExactSizeIterator,
248250
{
249251
fn from(iter: T) -> Self {
250252
IterColumn(iter)

src/query/range_query/range_query_u64_fastfield.rs

+16-22
Original file line numberDiff line numberDiff line change
@@ -36,31 +36,27 @@ impl Weight for FastFieldRangeWeight {
3636
let field_type = reader.schema().get_field_entry(self.field).field_type();
3737
match field_type.fastfield_cardinality().unwrap() {
3838
Cardinality::SingleValue => {
39-
let ip_addr_fast_field = reader.fast_fields().u64_lenient(self.field)?;
39+
let fast_field = reader.fast_fields().u64_lenient(self.field)?;
4040
let value_range = bound_to_value_range(
4141
&self.left_bound,
4242
&self.right_bound,
43-
ip_addr_fast_field.min_value(),
44-
ip_addr_fast_field.max_value(),
45-
);
46-
let docset = RangeDocSet::new(
47-
value_range,
48-
FastFieldCardinality::SingleValue(ip_addr_fast_field),
43+
fast_field.min_value(),
44+
fast_field.max_value(),
4945
);
46+
let docset =
47+
RangeDocSet::new(value_range, FastFieldCardinality::SingleValue(fast_field));
5048
Ok(Box::new(ConstScorer::new(docset, boost)))
5149
}
5250
Cardinality::MultiValues => {
53-
let ip_addr_fast_field = reader.fast_fields().u64s_lenient(self.field)?;
51+
let fast_field = reader.fast_fields().u64s_lenient(self.field)?;
5452
let value_range = bound_to_value_range(
5553
&self.left_bound,
5654
&self.right_bound,
57-
ip_addr_fast_field.min_value(),
58-
ip_addr_fast_field.max_value(),
59-
);
60-
let docset = RangeDocSet::new(
61-
value_range,
62-
FastFieldCardinality::MultiValue(ip_addr_fast_field),
55+
fast_field.min_value(),
56+
fast_field.max_value(),
6357
);
58+
let docset =
59+
RangeDocSet::new(value_range, FastFieldCardinality::MultiValue(fast_field));
6460
Ok(Box::new(ConstScorer::new(docset, boost)))
6561
}
6662
}
@@ -131,15 +127,13 @@ mod tests {
131127
pub fn doc_from_id_1(id: u64) -> Doc {
132128
let id = id * 1000;
133129
Doc {
134-
// ip != id
135130
id_name: id.to_string(),
136131
id,
137132
}
138133
}
139134
fn doc_from_id_2(id: u64) -> Doc {
140135
let id = id * 1000;
141136
Doc {
142-
// ip != id
143137
id_name: (id - 1).to_string(),
144138
id,
145139
}
@@ -148,19 +142,19 @@ mod tests {
148142
proptest! {
149143
#![proptest_config(ProptestConfig::with_cases(10))]
150144
#[test]
151-
fn test_ip_range_for_docs_prop(ops in proptest::collection::vec(operation_strategy(), 1..1000)) {
145+
fn test_range_for_docs_prop(ops in proptest::collection::vec(operation_strategy(), 1..1000)) {
152146
assert!(test_id_range_for_docs(ops).is_ok());
153147
}
154148
}
155149

156150
#[test]
157-
fn ip_range_regression1_test() {
151+
fn range_regression1_test() {
158152
let ops = vec![doc_from_id_1(0)];
159153
assert!(test_id_range_for_docs(ops).is_ok());
160154
}
161155

162156
#[test]
163-
fn ip_range_regression2_test() {
157+
fn range_regression2_test() {
164158
let ops = vec![
165159
doc_from_id_1(52),
166160
doc_from_id_1(63),
@@ -172,13 +166,13 @@ mod tests {
172166
}
173167

174168
#[test]
175-
fn ip_range_regression3_test() {
169+
fn range_regression3_test() {
176170
let ops = vec![doc_from_id_1(1), doc_from_id_1(2), doc_from_id_1(3)];
177171
assert!(test_id_range_for_docs(ops).is_ok());
178172
}
179173

180174
#[test]
181-
fn ip_range_regression4_test() {
175+
fn range_regression4_test() {
182176
let ops = vec![doc_from_id_2(100)];
183177
assert!(test_id_range_for_docs(ops).is_ok());
184178
}
@@ -294,7 +288,7 @@ mod tests {
294288
);
295289
assert_eq!(get_num_hits(query_from_text(&query)), expected_num_hits);
296290

297-
// Intersection search on multivalue ip field
291+
// Intersection search on multivalue id field
298292
let id_filter = sample_docs[0].id_name.to_string();
299293
let query = format!(
300294
"{} AND id_name:{}",

0 commit comments

Comments
 (0)