In Files

Methods

Class Index [+]

Quicksearch

Ferret::Search::BooleanQuery

Summary

A BooleanQuery is used for combining many queries into one. This is best illustrated with an example.

Example

Lets say we wanted to find all documents with the term “Ruby” in the :title and the term “Ferret” in the :content field or the :title field written before January 2006. You could build the query like this.

  tq1 = TermQuery.new(:title, "ruby")
  tq21 = TermQuery.new(:title, "ferret")
  tq22 = TermQuery.new(:content, "ferret")
  bq2 = BooleanQuery.new
  bq2 << tq21 << tq22

  rq3 = RangeQuery.new(:written, :< => "200601")

  query = BooleanQuery.new
  query.add_query(tq1, :must).add_query(bq2, :must).add_query(rq3, :must)

Public Class Methods

new(coord_disable = false) click to toggle source

Create a new BooleanQuery. If you don’t care about the scores of the sub-queries added to the query (as would be the case for many automatically generated queries) you can disable the coord_factor of the score. This will slightly improve performance for the query. Usually you should leave this parameter as is.

static VALUE
frb_bq_init(int argc, VALUE *argv, VALUE self)
{
    VALUE rcoord_disabled;
    bool coord_disabled = false;
    Query *q;
    if (rb_scan_args(argc, argv, "01", &rcoord_disabled)) {
        coord_disabled = RTEST(rcoord_disabled);
    }
    q = bq_new(coord_disabled);
    Frt_Wrap_Struct(self, &frb_bq_mark, &frb_q_free, q);
    object_add(q, self);
    return self;
}

Public Instance Methods

<<(query, occur = :should) → boolean_clause boolean_query << boolean_clause → boolean_clause click to toggle source

Us this method to add sub-queries to a BooleanQuery. You can either add a straight Query or a BooleanClause. When adding a Query, the default occurrence requirement is :should. That is the Query’s match will be scored but it isn’t essential for a match. If the query should be essential, use :must. For exclusive queries use :must_not.

When adding a Boolean clause to a BooleanQuery there is no need to set the occurrence property because it is already set in the BooleanClause. Therefor the occur parameter will be ignored in this case.

query

Query to add to the BooleanQuery

occur

occurrence requirement for the query being added. Must be one of

:must, :should, :must_not
returns

BooleanClause which was added

static VALUE
frb_bq_add_query(int argc, VALUE *argv, VALUE self)
{
    GET_Q();
    VALUE rquery, roccur;
    BCType occur = BC_SHOULD;
    Query *sub_q;
    VALUE klass;

    if (rb_scan_args(argc, argv, "11", &rquery, &roccur) == 2) {
        occur = frb_get_occur(roccur);
    }
    klass = CLASS_OF(rquery);
    if (klass == cBooleanClause) {
        BooleanClause *bc = (BooleanClause *)DATA_PTR(rquery);
        if (argc > 1) {
            rb_warning("Second argument to BooleanQuery#add is ignored "
                       "when adding BooleanClause");
        }
        bq_add_clause(q, bc);
        return rquery;
    } else if (TYPE(rquery) == T_DATA) {
        Data_Get_Struct(rquery, Query, sub_q);
        return frb_bc_wrap(bq_add_query(q, sub_q, occur));
    } else {
        rb_raise(rb_eArgError, "Cannot add %s to a BooleanQuery",
                 rb_class2name(klass));
    }
    return self;
}
<<(query, occur = :should) → boolean_clause boolean_query << boolean_clause → boolean_clause click to toggle source

Us this method to add sub-queries to a BooleanQuery. You can either add a straight Query or a BooleanClause. When adding a Query, the default occurrence requirement is :should. That is the Query’s match will be scored but it isn’t essential for a match. If the query should be essential, use :must. For exclusive queries use :must_not.

When adding a Boolean clause to a BooleanQuery there is no need to set the occurrence property because it is already set in the BooleanClause. Therefor the occur parameter will be ignored in this case.

query

Query to add to the BooleanQuery

occur

occurrence requirement for the query being added. Must be one of

:must, :should, :must_not
returns

BooleanClause which was added

static VALUE
frb_bq_add_query(int argc, VALUE *argv, VALUE self)
{
    GET_Q();
    VALUE rquery, roccur;
    BCType occur = BC_SHOULD;
    Query *sub_q;
    VALUE klass;

    if (rb_scan_args(argc, argv, "11", &rquery, &roccur) == 2) {
        occur = frb_get_occur(roccur);
    }
    klass = CLASS_OF(rquery);
    if (klass == cBooleanClause) {
        BooleanClause *bc = (BooleanClause *)DATA_PTR(rquery);
        if (argc > 1) {
            rb_warning("Second argument to BooleanQuery#add is ignored "
                       "when adding BooleanClause");
        }
        bq_add_clause(q, bc);
        return rquery;
    } else if (TYPE(rquery) == T_DATA) {
        Data_Get_Struct(rquery, Query, sub_q);
        return frb_bc_wrap(bq_add_query(q, sub_q, occur));
    } else {
        rb_raise(rb_eArgError, "Cannot add %s to a BooleanQuery",
                 rb_class2name(klass));
    }
    return self;
}

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.