package gov.nysenate.openleg.dao.law.search;
import gov.nysenate.openleg.dao.base.LimitOffset;
import gov.nysenate.openleg.model.law.LawDocId;
import gov.nysenate.openleg.model.law.LawDocument;
import gov.nysenate.openleg.model.search.SearchResults;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.rescore.RescoreBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import java.util.Collection;
import java.util.List;
/**
* DAO Interface for searching law data.
*/
public interface LawSearchDao
{
/**
* Perform a search against all law documents.
*
* @param query QueryBuilder
* @param filter FilterBuilder
* @param rescorer Rescorer
* @param sort String
* @param limOff LimitOffset
* @return SearchResults<LawDocId>
*/
public SearchResults<LawDocId> searchLawDocs(QueryBuilder query, QueryBuilder filter, RescoreBuilder.Rescorer rescorer,
List<SortBuilder> sort, LimitOffset limOff);
/**
* Update the law index with the supplied law doc.
*
* @param lawDoc LawDocument
*/
public void updateLawIndex(LawDocument lawDoc);
/**
* Update the law index with the supplied collection of law docs.
*
* @param lawDocs Collection<LawDocument>
*/
public void updateLawIndex(Collection<LawDocument> lawDocs);
/**
* Removes the law document from the index.
*
* @param lawDocId LawDocId
*/
public void deleteLawDocFromIndex(LawDocId lawDocId);
}