Exemplo n.º 1
0
void
Indexer_delete_by_term(Indexer *self, CharBuf *field, Obj *term)
{
    Schema    *schema = self->schema;
    FieldType *type   = Schema_Fetch_Type(schema, field);

    // Raise exception if the field isn't indexed. 
    if (!type || !FType_Indexed(type)) 
        THROW(ERR, "%o is not an indexed field", field);

    // Analyze term if appropriate, then zap. 
    if (FType_Is_A(type, FULLTEXTTYPE)) {
        CERTIFY(term, CHARBUF);
        {
            Analyzer *analyzer = Schema_Fetch_Analyzer(schema, field);
            VArray *terms = Analyzer_Split(analyzer, (CharBuf*)term);
            Obj *analyzed_term = VA_Fetch(terms, 0);
            if (analyzed_term) {
                DelWriter_Delete_By_Term(self->del_writer, field,
                    analyzed_term);
            }
            DECREF(terms);
        }
    }
    else {
        DelWriter_Delete_By_Term(self->del_writer, field, term);
    }
}
Exemplo n.º 2
0
void
Indexer_Delete_By_Term_IMP(Indexer *self, String *field, Obj *term) {
    IndexerIVARS *const ivars = Indexer_IVARS(self);
    Schema    *schema = ivars->schema;
    FieldType *type   = Schema_Fetch_Type(schema, field);

    // Raise exception if the field isn't indexed.
    if (!type || !FType_Indexed(type)) {
        THROW(ERR, "%o is not an indexed field", field);
    }

    // Analyze term if appropriate, then zap.
    if (FType_is_a(type, FULLTEXTTYPE)) {
        CERTIFY(term, STRING);
        Analyzer *analyzer = Schema_Fetch_Analyzer(schema, field);
        Vector *terms = Analyzer_Split(analyzer, (String*)term);
        Obj *analyzed_term = Vec_Fetch(terms, 0);
        if (analyzed_term) {
            DelWriter_Delete_By_Term(ivars->del_writer, field,
                                     analyzed_term);
        }
        DECREF(terms);
    }
    else {
        DelWriter_Delete_By_Term(ivars->del_writer, field, term);
    }
}