Skip to content

Commit b818bde

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

File tree

2 files changed

+18
-29
lines changed

2 files changed

+18
-29
lines changed

src/collector/filter_collector_wrapper.rs

+10-25
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);
@@ -70,7 +69,7 @@ use crate::{DocId, Score, SegmentReader, TantivyError};
7069
pub struct FilterCollector<TCollector, TPredicate, TPredicateValue>
7170
where TPredicate: 'static + Clone
7271
{
73-
field: Field,
72+
field: String,
7473
collector: TCollector,
7574
predicate: TPredicate,
7675
t_predicate_value: PhantomData<TPredicateValue>,
@@ -83,7 +82,7 @@ where
8382
TPredicate: Fn(TPredicateValue) -> bool + Send + Sync + Clone,
8483
{
8584
/// Create a new `FilterCollector`.
86-
pub fn new(field: Field, predicate: TPredicate, collector: TCollector) -> Self {
85+
pub fn new(field: String, predicate: TPredicate, collector: TCollector) -> Self {
8786
Self {
8887
field,
8988
predicate,
@@ -110,18 +109,7 @@ where
110109
segment_local_id: u32,
111110
segment_reader: &SegmentReader,
112111
) -> 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())?;
112+
let column_opt = segment_reader.fast_fields().column_opt(&self.field)?;
125113

126114
let segment_collector = self
127115
.collector
@@ -229,7 +217,7 @@ where
229217
///
230218
/// let query_parser = QueryParser::for_index(&index, vec![title]);
231219
/// 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));
220+
/// let filter_collector = BytesFilterCollector::new("barcode".to_string(), |bytes: &[u8]| bytes.starts_with(b"01"), TopDocs::with_limit(2));
233221
/// let top_docs = searcher.search(&query, &filter_collector)?;
234222
///
235223
/// assert_eq!(top_docs.len(), 1);
@@ -240,7 +228,7 @@ where
240228
pub struct BytesFilterCollector<TCollector, TPredicate>
241229
where TPredicate: 'static + Clone
242230
{
243-
field: Field,
231+
field: String,
244232
collector: TCollector,
245233
predicate: TPredicate,
246234
}
@@ -251,7 +239,7 @@ where
251239
TPredicate: Fn(&[u8]) -> bool + Send + Sync + Clone,
252240
{
253241
/// Create a new `BytesFilterCollector`.
254-
pub fn new(field: Field, predicate: TPredicate, collector: TCollector) -> Self {
242+
pub fn new(field: String, predicate: TPredicate, collector: TCollector) -> Self {
255243
Self {
256244
field,
257245
predicate,
@@ -274,10 +262,7 @@ where
274262
segment_local_id: u32,
275263
segment_reader: &SegmentReader,
276264
) -> 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)?;
265+
let column_opt = segment_reader.fast_fields().bytes(&self.field)?;
281266

282267
let segment_collector = self
283268
.collector

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)