/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
parcel Lucy;
/** Base class for searching collections of documents.
*
* Abstract base class for objects which search. Core subclasses include
* L<Lucy::Search::IndexSearcher> and
* L<Lucy::Search::PolySearcher>.
*/
public class Lucy::Search::Searcher inherits Clownfish::Obj {
Schema *schema;
QueryParser *qparser;
/** Abstract constructor.
*
* @param schema A Schema.
*/
public inert Searcher*
init(Searcher *self, Schema *schema);
public void
Destroy(Searcher *self);
/** Return the maximum number of docs in the collection represented by the
* Searcher, which is also the highest possible internal doc id.
* Documents which have been marked as deleted but not yet purged are
* included in this count.
*/
public abstract int32_t
Doc_Max(Searcher *self);
/** Return the number of documents which contain the term in the given
* field.
*
* @param field Field name.
* @param term The term to look up.
*/
public abstract uint32_t
Doc_Freq(Searcher *self, String *field, Obj *term);
/** If the supplied object is a Query, return it; if it's a query string,
* create a QueryParser and parse it to produce a query against all
* indexed fields.
*/
public incremented Query*
Glean_Query(Searcher *self, Obj *query = NULL);
/** Return a Hits object containing the top results.
*
* @param query Either a Query object or a query string.
* @param offset The number of most-relevant hits to discard, typically
* used when "paging" through hits N at a time. Setting
* <code>offset</code> to 20 and <code>num_wanted</code> to 10 retrieves
* hits 21-30, assuming that 30 hits can be found.
* @param num_wanted The number of hits you would like to see after
* <code>offset</code> is taken into account.
* @param sort_spec A L<Lucy::Search::SortSpec>, which will affect
* how results are ranked and returned.
*/
public incremented Hits*
Hits(Searcher *self, Obj *query, uint32_t offset = 0,
uint32_t num_wanted = 10, SortSpec *sort_spec = NULL);
/** Iterate over hits, feeding them into a
* L<Collector|Lucy::Search::Collector>.
*
* @param query A Query.
* @param collector A Collector.
*/
public abstract void
Collect(Searcher *self, Query *query, Collector *collector);
/** Return a TopDocs object with up to num_wanted hits.
*/
abstract incremented TopDocs*
Top_Docs(Searcher *self, Query *query, uint32_t num_wanted,
SortSpec *sort_spec = NULL);
/** Retrieve a document. Throws an error if the doc id is out of range.
*
* @param doc_id A document id.
*/
public abstract incremented HitDoc*
Fetch_Doc(Searcher *self, int32_t doc_id);
/** Return the DocVector identified by the supplied doc id. Throws an
* error if the doc id is out of range.
*/
abstract incremented DocVector*
Fetch_Doc_Vec(Searcher *self, int32_t doc_id);
/** Accessor for the object's <code>schema</code> member.
*/
public Schema*
Get_Schema(Searcher *self);
/** Release external resources.
*/
void
Close(Searcher *self);
}