/* * call-seq: * query.terms(searcher) -> term_array * * Returns an array of terms searched for by this query. This can be used for * implementing an external query highlighter for example. You must supply a * searcher so that the query can be rewritten and optimized like it would be * in a real search. */ static VALUE frb_q_get_terms(VALUE self, VALUE searcher) { VALUE rterms = rb_ary_new(); HashSet *terms = hs_new((hash_ft)&term_hash, (eq_ft)&term_eq, (free_ft)term_destroy); HashSetEntry *hse; GET_Q(); Searcher *sea = (Searcher *)DATA_PTR(searcher); Query *rq = sea->rewrite(sea, q); rq->extract_terms(rq, terms); q_deref(rq); for (hse = terms->first; hse; hse = hse->next) { Term *term = (Term *)hse->elem; rb_ary_push(rterms, frb_get_term(term->field, term->text)); } hs_destroy(terms); return rterms; }