---
name: "Catmandu::Searchable"
section: "3pm"
platform: "linux"
package: "libcatmandu-perl"
version: "1.2024-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Catmandu::Searchable"
---

# Catmandu::Searchable(3pm)

Optional role for searchable stores

## NAME

Catmandu::Searchable - Optional role for searchable stores

## SYNOPSIS

```
    my $store = Catmandu::Store::Solr->new();
    # Return one page of search results (page size = 1000)
    my $hits  = $store->bag->search(
           query => 'dna' ,
           start => 0 ,
           limit => 100 ,
           sort  => 'title desc',
                );
    # Return all the search results as iterator
    my $it    = $store->bag->searcher(query => 'dna');
    $it->each(sub { ...});
    $store->bag->delete_by_query(query => 'dna');
```

## CONFIGURATION

- default\_limit

  The default value for `"limit"`. By default this is `10`.

- maximum\_limit

  The maximum allowed value for `"limit"`. By default this is `1000`.

- maximum\_offset

  The maximum allowed offset. When set no hits will be returned after hit offset is greater than `"maximum_offset"`, this to avoid deep paging problems. Pagination values will be also be adjusted accordingly.

## METHODS

### search(query =\> $query, start =\> $start, page =\> $page, limit =\> $num, sort =\> $sort)

Search the database and returns a Catmandu::Hits on success. The Hits represents one result page of at most `$num` results. The `$query` and `$sort` should implement the query and sort syntax of the underlying search engine.

Optionally provide the index of the first result using the `"start"` option, or the starting page using the `"page"` option. The number of records in a result page can be set using the `"limit"` option. Sorting options are being sent verbatim to the underlying search engine.

### searcher(query =\> $query, start =\> $start, limit =\> $num, sort =\> $sort, cql\_query =\> $cql)

Search the database and return a Catmandu::Iterable on success. This iterator can be used to loop over the complete result set. The `$query` and `$sort` should implement the query and sort syntax of the underlying search engine.

Optionally provide the index of the first result using the `"start"` option. The number of records in a page can be set using the `"limit"` option. Sorting options are being sent verbatim to the underlying search engine.

### delete\_by\_query(query =\> $query)

Delete items from the database that match `$query`

## CQL support

Stores that are support the CQL query language \<https://www.loc.gov/standards/sru/cql/\> also accept the `"cql_query"` and `"sru_sortkeys"` arguments. See Catmandu::CQLSearchable for more information.

## SEE ALSO

Catmandu::CQLSearchable, Catmandu::Hits, Catmandu::Paged
