@@ -12,8 +12,7 @@ use std::marker::PhantomData;
12
12
use columnar:: { BytesColumn , Column , DynamicColumn , HasAssociatedColumnType } ;
13
13
14
14
use crate :: collector:: { Collector , SegmentCollector } ;
15
- use crate :: schema:: Field ;
16
- use crate :: { DocId , Score , SegmentReader , TantivyError } ;
15
+ use crate :: { DocId , Score , SegmentReader } ;
17
16
18
17
/// The `FilterCollector` filters docs using a fast field value and a predicate.
19
18
///
@@ -50,13 +49,13 @@ use crate::{DocId, Score, SegmentReader, TantivyError};
50
49
///
51
50
/// let query_parser = QueryParser::for_index(&index, vec![title]);
52
51
/// 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));
54
53
/// let top_docs = searcher.search(&query, &no_filter_collector)?;
55
54
///
56
55
/// assert_eq!(top_docs.len(), 1);
57
56
/// assert_eq!(top_docs[0].1, DocAddress::new(0, 1));
58
57
///
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));
60
59
/// let filtered_top_docs = searcher.search(&query, &filter_all_collector)?;
61
60
///
62
61
/// assert_eq!(filtered_top_docs.len(), 0);
@@ -70,7 +69,7 @@ use crate::{DocId, Score, SegmentReader, TantivyError};
70
69
pub struct FilterCollector < TCollector , TPredicate , TPredicateValue >
71
70
where TPredicate : ' static + Clone
72
71
{
73
- field : Field ,
72
+ field : String ,
74
73
collector : TCollector ,
75
74
predicate : TPredicate ,
76
75
t_predicate_value : PhantomData < TPredicateValue > ,
83
82
TPredicate : Fn ( TPredicateValue ) -> bool + Send + Sync + Clone ,
84
83
{
85
84
/// 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 {
87
86
Self {
88
87
field,
89
88
predicate,
@@ -110,18 +109,7 @@ where
110
109
segment_local_id : u32 ,
111
110
segment_reader : & SegmentReader ,
112
111
) -> 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 ) ?;
125
113
126
114
let segment_collector = self
127
115
. collector
@@ -229,7 +217,7 @@ where
229
217
///
230
218
/// let query_parser = QueryParser::for_index(&index, vec![title]);
231
219
/// 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));
233
221
/// let top_docs = searcher.search(&query, &filter_collector)?;
234
222
///
235
223
/// assert_eq!(top_docs.len(), 1);
@@ -240,7 +228,7 @@ where
240
228
pub struct BytesFilterCollector < TCollector , TPredicate >
241
229
where TPredicate : ' static + Clone
242
230
{
243
- field : Field ,
231
+ field : String ,
244
232
collector : TCollector ,
245
233
predicate : TPredicate ,
246
234
}
@@ -251,7 +239,7 @@ where
251
239
TPredicate : Fn ( & [ u8 ] ) -> bool + Send + Sync + Clone ,
252
240
{
253
241
/// 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 {
255
243
Self {
256
244
field,
257
245
predicate,
@@ -274,10 +262,7 @@ where
274
262
segment_local_id : u32 ,
275
263
segment_reader : & SegmentReader ,
276
264
) -> 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 ) ?;
281
266
282
267
let segment_collector = self
283
268
. collector
0 commit comments