示例#1
0
文件: ind.c 项目: dustin/ferret
Query *index_get_query(Index *self, char *qstr)
{
    int i;
    FieldInfos *fis;
    ensure_searcher_open(self);
    fis = self->ir->fis;
    for (i = fis->size - 1; i >= 0; i--) {
        hs_add(self->qp->all_fields, (char *)fis->fields[i]->name);
    }
    return qp_parse(self->qp, qstr);
}
示例#2
0
static void test_qp_prefix_query(TestCase *tc, void *data)
{
    QParser *parser;
    Query *q;
    (void)data;

    parser = qp_new(letter_analyzer_new(true));
    qp_add_field(parser, I("xx"), true,  true);

    q = qp_parse(parser, "asdg*");
    Aiequal(PREFIX_QUERY, q->type);
    q_deref(q);
    q = qp_parse(parser, "a?dg*");
    Aiequal(WILD_CARD_QUERY, q->type);
    q_deref(q);
    q = qp_parse(parser, "a*dg*");
    Aiequal(WILD_CARD_QUERY, q->type);
    q_deref(q);
    q = qp_parse(parser, "asdg*a");
    Aiequal(WILD_CARD_QUERY, q->type);
    q_deref(q);
    qp_destroy(parser);
}
示例#3
0
/*
 *  call-seq:
 *     query_parser.parse(query_string) -> Query
 *
 *  Parse a query string returning a Query object if parsing was successful.
 *  Will raise a QueryParseException if unsuccessful. 
 */
static VALUE
frt_qp_parse(VALUE self, VALUE rstr)
{
    const char *msg = NULL;
    volatile VALUE rq;
    GET_QP;
    rstr = rb_obj_as_string(rstr);
    TRY
        rq = frt_get_q(qp_parse(qp, RSTRING(rstr)->ptr));
        break;
    default:
        msg = xcontext.msg;
        HANDLED();
    XENDTRY

    if (msg) {
        rb_raise(cQueryParseException, msg);
    }

    return rq;
}