/* * 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 frt_q_get_terms(VALUE self, VALUE searcher) { int i; VALUE rterms = rb_ary_new(); HashSet *terms = term_set_new(); GET_Q(); Searcher *sea = (Searcher *)DATA_PTR(searcher); Query *rq = sea->rewrite(sea, q); rq->extract_terms(rq, terms); q_deref(rq); for (i = 0; i < terms->size; i++) { Term *term = (Term *)terms->elems[i]; rb_ary_push(rterms, frt_get_term(term->field, term->text)); } hs_destroy(terms); return rterms; }