NAME
    Search::Typesense - Perl interface to Typesense search engine.

SYNOPSIS
        my $typesense = Search::Typesense->new(
            host      => $host,    # required
            api_key   => $key,     # required
            port      => $port,    # defaults to 8108
            use_https => $bool,    # defaults to true
        );
    
        my $results = $typesense->search(
            $collection_name,
            { q => 'Search String' },
        );
        if ( $results->{found} ) {
            foreach my $hit ( @{ $results->{hits} } ) {
                ...;
            }
        }

    Check here for a comparison to ElasticSearch and similar technologies
    <https://typesense.org/typesense-vs-algolia-vs-elasticsearch-vs-meilisea
    rch/>.

DESCRIPTION
    ALPHA CODE. The interface can and will change without warning.

    This is an interface to the Typesense <https://typesense.org/> search
    engine. Most methods will do one of three things:

    *   Return results as defined in the Typesense documentation (listed per
        section)

    *   Return nothing if Typesense returns a 404.

    *   "croak" if Typesense returns an error.

CONSTRUCTOR
    The constructor takes a list (or hashref) of key/value pairs.

        my $typesense = Search::Typesense->new(
            host      => $host,    # required
            api_key   => $key,     # required
            port      => $port,    # defaults to 8108
            use_https => $bool,    # defaults to true
        );

  "api_key"
    The api key to which will be sent as the "X-TYPESENSE-API-KEY" header.

  "host"
    The hostname to connect to.

  "port"
    Optional port number to connect to. Defaults to 8108 if not supplied.

  "use_https"
    Optional boolean. Whether or not to connect to Typesense over https.
    Default true.

METHODS
    For CRUD operations on collections and documents, see the documentation
    for "collections" (Search::Typesense::Collection) and "documents"
    (Search::Typesense::Document).

  "collections"
        my $collections = $typesense->collections;
        my $collection  = $collections->get($collection_name);
        my $results     = $collections->search($collection_name, {q => 'London'});

    Returns an instance of Search::Typesense::Collection for managing
    Typesense collections.

  "search"
        my $results = $typesense->search($collection_name, {q => 'London'});

    Shorthand that delegated to "$typesense->collections->search(...)".

    We provide this on the top-level $typesense object because this is the
    common case.

  "documents"
        my $documents = $typesense->documents;
        my $document  = $documents->delete($collection_name, $document_id);

    Returns an instance of Search::Typesense::Document for managing
    Typesense documents.

  "assert_is_running"
        $typesense->assert_is_running;

    This does nothing if we can connect to Typesense. Otherwise, this method
    will "croak" with a message explaining the error.

  "typesense_version"
        my $version = $typesense->typesense_version;

    Returns an instance of Search::Typesense::Version.

    If your version of Typesense is older than 0.8.0, this method will
    return nothing.

INTERNATIONALIZATION (I18N)
    Currently Typesense supports languages that use spaces as a word
    separator. In the future, a new tokenizer will be added to support
    languages such as Chinese or Japanese. I do not know the timeframe for
    this.

AUTHOR
    Curtis "Ovid" Poe, "<ovid at allaroundtheworld.fr>"

BUGS
    Please report any bugs or feature requests to
    "https://github.com/Ovid/Search-Typesense/issues". I will be notified,
    and then you'll automatically be notified of progress on your bug as I
    make changes.

SUPPORT
    You can find documentation for this module with the perldoc command.

        perldoc Search::Typesense

    You can also look for information at:

    *   Github Repo

        <https://github.com/Ovid/Search-Typesense/>

    *   Issue Tracker

        <https://github.com/Ovid/Search-Typesense/issues>

    *   Search CPAN

        <https://metacpan.org/release/Search-Typesense>

ACKNOWLEDGEMENTS
    Thanks for Sebastian Reidel and Matt Trout for feedback.

LICENSE AND COPYRIGHT
    This software is Copyright (c) 2021 by Curtis "Ovid" Poe.

    This is free software, licensed under:

      The Artistic License 2.0 (GPL Compatible)