Skip to content

Commit 030609e

Browse files
committed
replace Field with field name
1 parent b525f65 commit 030609e

File tree

2 files changed

+24
-32
lines changed

2 files changed

+24
-32
lines changed

src/collector/filter_collector_wrapper.rs

+16-28
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ use std::marker::PhantomData;
1212
use columnar::{BytesColumn, Column, DynamicColumn, HasAssociatedColumnType};
1313

1414
use crate::collector::{Collector, SegmentCollector};
15-
use crate::schema::Field;
16-
use crate::{DocId, Score, SegmentReader, TantivyError};
15+
use crate::{DocId, Score, SegmentReader};
1716

1817
/// The `FilterCollector` filters docs using a fast field value and a predicate.
1918
///
@@ -50,13 +49,13 @@ use crate::{DocId, Score, SegmentReader, TantivyError};
5049
///
5150
/// let query_parser = QueryParser::for_index(&index, vec![title]);
5251
/// let query = query_parser.parse_query("diary")?;
53-
/// let no_filter_collector = FilterCollector::new(price, |value: u64| value > 20_120u64, TopDocs::with_limit(2));
52+
/// let no_filter_collector = FilterCollector::new("price".to_string(), |value: u64| value > 20_120u64, TopDocs::with_limit(2));
5453
/// let top_docs = searcher.search(&query, &no_filter_collector)?;
5554
///
5655
/// assert_eq!(top_docs.len(), 1);
5756
/// assert_eq!(top_docs[0].1, DocAddress::new(0, 1));
5857
///
59-
/// let filter_all_collector: FilterCollector<_, _, u64> = FilterCollector::new(price, |value| value < 5u64, TopDocs::with_limit(2));
58+
/// let filter_all_collector: FilterCollector<_, _, u64> = FilterCollector::new("price".to_string(), |value| value < 5u64, TopDocs::with_limit(2));
6059
/// let filtered_top_docs = searcher.search(&query, &filter_all_collector)?;
6160
///
6261
/// assert_eq!(filtered_top_docs.len(), 0);
@@ -68,9 +67,10 @@ use crate::{DocId, Score, SegmentReader, TantivyError};
6867
/// [`FastValue`][crate::fastfield::FastValue] trait, e.g. `u64` but not `&[u8]`.
6968
/// To filter based on a bytes fast field, use a [`BytesFilterCollector`] instead.
7069
pub struct FilterCollector<TCollector, TPredicate, TPredicateValue>
71-
where TPredicate: 'static + Clone
70+
where
71+
TPredicate: 'static + Clone,
7272
{
73-
field: Field,
73+
field: String,
7474
collector: TCollector,
7575
predicate: TPredicate,
7676
t_predicate_value: PhantomData<TPredicateValue>,
@@ -83,7 +83,7 @@ where
8383
TPredicate: Fn(TPredicateValue) -> bool + Send + Sync + Clone,
8484
{
8585
/// Create a new `FilterCollector`.
86-
pub fn new(field: Field, predicate: TPredicate, collector: TCollector) -> Self {
86+
pub fn new(field: String, predicate: TPredicate, collector: TCollector) -> Self {
8787
Self {
8888
field,
8989
predicate,
@@ -110,18 +110,7 @@ where
110110
segment_local_id: u32,
111111
segment_reader: &SegmentReader,
112112
) -> crate::Result<Self::Child> {
113-
let schema = segment_reader.schema();
114-
let field_entry = schema.get_field_entry(self.field);
115-
if !field_entry.is_fast() {
116-
return Err(TantivyError::SchemaError(format!(
117-
"Field {:?} is not a fast field.",
118-
field_entry.name()
119-
)));
120-
}
121-
122-
let column_opt = segment_reader
123-
.fast_fields()
124-
.column_opt(field_entry.name())?;
113+
let column_opt = segment_reader.fast_fields().column_opt(&self.field)?;
125114

126115
let segment_collector = self
127116
.collector
@@ -229,7 +218,7 @@ where
229218
///
230219
/// let query_parser = QueryParser::for_index(&index, vec![title]);
231220
/// let query = query_parser.parse_query("diary")?;
232-
/// let filter_collector = BytesFilterCollector::new(barcode, |bytes: &[u8]| bytes.starts_with(b"01"), TopDocs::with_limit(2));
221+
/// let filter_collector = BytesFilterCollector::new("barcode".to_string(), |bytes: &[u8]| bytes.starts_with(b"01"), TopDocs::with_limit(2));
233222
/// let top_docs = searcher.search(&query, &filter_collector)?;
234223
///
235224
/// assert_eq!(top_docs.len(), 1);
@@ -238,9 +227,10 @@ where
238227
/// # }
239228
/// ```
240229
pub struct BytesFilterCollector<TCollector, TPredicate>
241-
where TPredicate: 'static + Clone
230+
where
231+
TPredicate: 'static + Clone,
242232
{
243-
field: Field,
233+
field: String,
244234
collector: TCollector,
245235
predicate: TPredicate,
246236
}
@@ -251,7 +241,7 @@ where
251241
TPredicate: Fn(&[u8]) -> bool + Send + Sync + Clone,
252242
{
253243
/// Create a new `BytesFilterCollector`.
254-
pub fn new(field: Field, predicate: TPredicate, collector: TCollector) -> Self {
244+
pub fn new(field: String, predicate: TPredicate, collector: TCollector) -> Self {
255245
Self {
256246
field,
257247
predicate,
@@ -274,10 +264,7 @@ where
274264
segment_local_id: u32,
275265
segment_reader: &SegmentReader,
276266
) -> crate::Result<Self::Child> {
277-
let schema = segment_reader.schema();
278-
let field_name = schema.get_field_name(self.field);
279-
280-
let column_opt = segment_reader.fast_fields().bytes(field_name)?;
267+
let column_opt = segment_reader.fast_fields().bytes(&self.field)?;
281268

282269
let segment_collector = self
283270
.collector
@@ -304,7 +291,8 @@ where
304291
}
305292

306293
pub struct BytesFilterSegmentCollector<TSegmentCollector, TPredicate>
307-
where TPredicate: 'static
294+
where
295+
TPredicate: 'static,
308296
{
309297
column_opt: Option<BytesColumn>,
310298
segment_collector: TSegmentCollector,

src/collector/tests.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub fn test_filter_collector() -> crate::Result<()> {
4040
let query_parser = QueryParser::for_index(&index, vec![title]);
4141
let query = query_parser.parse_query("diary")?;
4242
let filter_some_collector = FilterCollector::new(
43-
price,
43+
"price".to_string(),
4444
&|value: u64| value > 20_120u64,
4545
TopDocs::with_limit(2),
4646
);
@@ -49,8 +49,11 @@ pub fn test_filter_collector() -> crate::Result<()> {
4949
assert_eq!(top_docs.len(), 1);
5050
assert_eq!(top_docs[0].1, DocAddress::new(0, 1));
5151

52-
let filter_all_collector: FilterCollector<_, _, u64> =
53-
FilterCollector::new(price, &|value| value < 5u64, TopDocs::with_limit(2));
52+
let filter_all_collector: FilterCollector<_, _, u64> = FilterCollector::new(
53+
"price".to_string(),
54+
&|value| value < 5u64,
55+
TopDocs::with_limit(2),
56+
);
5457
let filtered_top_docs = searcher.search(&query, &filter_all_collector).unwrap();
5558

5659
assert_eq!(filtered_top_docs.len(), 0);
@@ -61,7 +64,8 @@ pub fn test_filter_collector() -> crate::Result<()> {
6164
> 0
6265
}
6366

64-
let filter_dates_collector = FilterCollector::new(date, &date_filter, TopDocs::with_limit(5));
67+
let filter_dates_collector =
68+
FilterCollector::new("date".to_string(), &date_filter, TopDocs::with_limit(5));
6569
let filtered_date_docs = searcher.search(&query, &filter_dates_collector)?;
6670

6771
assert_eq!(filtered_date_docs.len(), 2);

0 commit comments

Comments
 (0)