Class | Ferret::Search::BooleanQuery |
In: |
ext/r_search.c
|
Parent: | Ferret::Search::Query |
A BooleanQuery is used for combining many queries into one. This is best illustrated with an 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)
Create a new BooleanQuery. If you don‘t care about the scores of the sub-queries added the 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.
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 |
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 |