Class: Ferret::Analysis::PerFieldAnalyzer
Summary
The PerFieldAnalyzer is for use when you want to analyze different fields with different analyzers. With the PerFieldAnalyzer you can specify how you want each field analyzed.
Example
# Create a new PerFieldAnalyzer which uses StandardAnalyzer by default pfa = PerFieldAnalyzer.new(StandardAnalyzer.new()) # Use the WhiteSpaceAnalyzer with no lowercasing on the :title field pfa[:title] = WhiteSpaceAnalyzer.new(false) # Use a custom analyzer on the :created_at field pfa[:created_at] = DateAnalyzer.new
Public Class Methods
PerFieldAnalyzer.new(default_analyzer) → analyzer
Create a new PerFieldAnalyzer specifying the default analyzer to use on all fields that are set specifically.
| default_analyzer: | analyzer to be used on fields that aren‘t otherwise specified |
/*
* call-seq:
* PerFieldAnalyzer.new(default_analyzer) -> analyzer
*
* Create a new PerFieldAnalyzer specifying the default analyzer to use on
* all fields that are set specifically.
*
* default_analyzer:: analyzer to be used on fields that aren't otherwise
* specified
*/
static VALUE
frt_per_field_analyzer_init(VALUE self, VALUE ranalyzer)
{
Analyzer *def = frt_get_cwrapped_analyzer(ranalyzer);
Analyzer *a = per_field_analyzer_new(def);
Frt_Wrap_Struct(self, &frt_pfa_mark, &frt_analyzer_free, a);
object_add(a, self);
return self;
}Public Instance Methods
per_field_analyzer.add_field(field_name, default_analyzer) → self
per_field_analyzer[field_name] = default_analyzer → self
Set the analyzer to be used on field field_name. Note that field_name should be a symbol.
| field_name: | field we wish to set the analyzer for |
| analyzer: | analyzer to be used on field_name |
/*
* call-seq:
* per_field_analyzer.add_field(field_name, default_analyzer) -> self
* per_field_analyzer[field_name] = default_analyzer -> self
*
* Set the analyzer to be used on field +field_name+. Note that field_name
* should be a symbol.
*
* field_name:: field we wish to set the analyzer for
* analyzer:: analyzer to be used on +field_name+
*/
static VALUE
frt_per_field_analyzer_add_field(VALUE self, VALUE rfield, VALUE ranalyzer)
{
Analyzer *pfa, *a;
Data_Get_Struct(self, Analyzer, pfa);
a = frt_get_cwrapped_analyzer(ranalyzer);
pfa_add_field(pfa, frt_field(rfield), a);
return self;
}
per_field_analyzer.add_field(field_name, default_analyzer) → self
per_field_analyzer[field_name] = default_analyzer → self
Set the analyzer to be used on field field_name. Note that field_name should be a symbol.
| field_name: | field we wish to set the analyzer for |
| analyzer: | analyzer to be used on field_name |
/*
* call-seq:
* per_field_analyzer.add_field(field_name, default_analyzer) -> self
* per_field_analyzer[field_name] = default_analyzer -> self
*
* Set the analyzer to be used on field +field_name+. Note that field_name
* should be a symbol.
*
* field_name:: field we wish to set the analyzer for
* analyzer:: analyzer to be used on +field_name+
*/
static VALUE
frt_per_field_analyzer_add_field(VALUE self, VALUE rfield, VALUE ranalyzer)
{
Analyzer *pfa, *a;
Data_Get_Struct(self, Analyzer, pfa);
a = frt_get_cwrapped_analyzer(ranalyzer);
pfa_add_field(pfa, frt_field(rfield), a);
return self;
}
analyzer.token_stream(field_name, input) → token_stream
Create a new TokenStream to tokenize input. The TokenStream created will also depend on the field_name in the case of the PerFieldAnalyzer.
| field_name: | name of the field to be tokenized |
| input: | data from the field to be tokenized |
/*
* call-seq:
* analyzer.token_stream(field_name, input) -> token_stream
*
* Create a new TokenStream to tokenize +input+. The TokenStream created will
* also depend on the +field_name+ in the case of the PerFieldAnalyzer.
*
* field_name:: name of the field to be tokenized
* input:: data from the field to be tokenized
*/
static VALUE
frt_pfa_analyzer_token_stream(VALUE self, VALUE rfield, VALUE rstring)
{
Analyzer *pfa, *a;
char *field = frt_field(rfield);
GET_A(pfa, self);
StringValue(rstring);
a = (Analyzer *)h_get(PFA(pfa)->dict, field);
if (a == NULL) {
a = PFA(pfa)->default_a;
}
if (a->get_ts == cwa_get_ts) {
return rb_funcall(CWA(a)->ranalyzer, id_token_stream, 2,
ID2SYM(rb_intern(field)), rb_str_new2(rs2s(rstring)));
}
else {
return get_rb_ts_from_a(a, rfield, rstring);
}
}