MeiliSearch PHP is the MeiliSearch API client for PHP developers.

Overview

MeiliSearch-PHP

MeiliSearch PHP

MeiliSearch | Documentation | Slack | Roadmap | Website | FAQ

Latest Stable Version Test License Bors enabled

โšก The MeiliSearch API client written for PHP ๐Ÿ˜

MeiliSearch PHP is the MeiliSearch API client for PHP developers.

MeiliSearch is an open-source search engine. Discover what MeiliSearch is!

Table of Contents

๐Ÿ“– Documentation

See our Documentation or our API References.

๐Ÿ”ง Installation

To get started, simply require the project using Composer.
You will also need to install packages that "provide" psr/http-client-implementation and psr/http-factory-implementation.
A list with compatible HTTP clients and client adapters can be found at php-http.org.

If you don't know which HTTP client to use, we recommend using Guzzle 7:

composer require meilisearch/meilisearch-php guzzlehttp/guzzle http-interop/http-factory-guzzle:^1.0

Here is an example of installation with the symfony/http-client:

composer require meilisearch/meilisearch-php symfony/http-client nyholm/psr7:^1.0

๐Ÿ’ก More HTTP client installations compatible with this package can be found in this section.

Run MeiliSearch

There are many easy ways to download and run a MeiliSearch instance.

For example, if you use Docker:

docker pull getmeili/meilisearch:latest # Fetch the latest version of MeiliSearch image from Docker Hub
docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest ./meilisearch --master-key=masterKey

NB: you can also download MeiliSearch from Homebrew or APT.

๐Ÿš€ Getting Started

Add documents



require_once __DIR__ . '/vendor/autoload.php';

use MeiliSearch\Client;

$client = new Client('http://127.0.0.1:7700', 'masterKey');

# An index is where the documents are stored.
$index = $client->index('books');

$documents = [
    ['book_id' => 123,  'title' => 'Pride and Prejudice', 'author' => 'Jane Austen'],
    ['book_id' => 456,  'title' => 'Le Petit Prince', 'author' => 'Antoine de Saint-Exupรฉry'],
    ['book_id' => 1,    'title' => 'Alice In Wonderland', 'author' => 'Lewis Carroll'],
    ['book_id' => 1344, 'title' => 'The Hobbit', 'author' => 'J. R. R. Tolkien'],
    ['book_id' => 4,    'title' => 'Harry Potter and the Half-Blood Prince', 'author' => 'J. K. Rowling'],
    ['book_id' => 42,   'title' => 'The Hitchhiker\'s Guide to the Galaxy', 'author' => 'Douglas Adams, Eoin Colfer, Thomas Tidholm'],
];

# If the index 'books' does not exist, MeiliSearch creates it when you first add the documents.
$index->addDocuments($documents); // => { "updateId": 0 }

With the updateId, you can check the status (enqueued, processed or failed) of your documents addition using the update endpoint.

Basic Search

// MeiliSearch is typo-tolerant:
$hits = $index->search('harry pottre')->getHits();
print_r($hits);

Output:

Array
(
    [0] => Array
        (
            [id] => 4
            [title] => Harry Potter and the Half-Blood Prince
        )
)

Custom Search

All the supported options are described in the search parameters section of the documentation.

๐Ÿ’ก More about the search() method in the Wiki.

$index->search(
    'prince',
    [
        'attributesToHighlight' => ['*'],
        'filters' => 'book_id > 10'
    ]
)->getRaw(); // Return in Array format

JSON output:

{
    "hits": [
        {
            "book_id": 456,
            "title": "Le Petit Prince"
        }
    ],
    "offset": 0,
    "limit": 20,
    "processingTimeMs": 10,
    "query": "prince"
}

๐Ÿค– Compatibility with MeiliSearch

This package only guarantees the compatibility with the version v0.20.0 of MeiliSearch.

๐Ÿ’ก Learn More

The following sections may interest you:

๐Ÿงฐ HTTP Client Compatibilities

You could use any PSR-18 compatible client to use with this SDK. No additional configurations are required.
A list of compatible HTTP clients and client adapters can be found at php-http.org.

If you want to use this meilisearch-php:

  • with guzzlehttp/guzzle (Guzzle 7), run:
composer require meilisearch/meilisearch-php guzzlehttp/guzzle http-interop/http-factory-guzzle:^1.0
  • with php-http/guzzle6-adapter (Guzzle < 7), run:
composer require meilisearch/meilisearch-php php-http/guzzle6-adapter:^2.0 http-interop/http-factory-guzzle:^1.0
  • with symfony/http-client, run:
composer require meilisearch/meilisearch-php symfony/http-client nyholm/psr7:^1.0
  • with php-http/curl-client, run:
composer require meilisearch/meilisearch-php php-http/curl-client nyholm/psr7:^1.0
  • with kriswallsmith/buzz, run:
composer require meilisearch/meilisearch-php kriswallsmith/buzz nyholm/psr7:^1.0

Customize your HTTP Client

For some reason, you might want to pass a custom configuration to your own HTTP client.
Make sure you have a PSR-18 compatible client when you initialize the MeiliSearch client.

Following the example in the Getting Started section, with the Guzzle HTTP client:

new Client('http://127.0.0.1:7700', 'masterKey', new GuzzleHttpClient(['timeout' => 2]));

โš™๏ธ Development Workflow and Contributing

Any new contribution is more than welcome in this project!

If you want to know more about the development workflow or want to contribute, please visit our contributing guidelines for detailed instructions!


MeiliSearch provides and maintains many SDKs and Integration tools like this one. We want to provide everyone with an amazing search experience for any kind of project. If you want to contribute, make suggestions, or just know what's going on right now, visit us in the integration-guides repository.

Comments
  • Meilisearch giving error 405 http status

    Meilisearch giving error 405 http status

    Hi dears , meilisearch giving such error when search (request type post)

    Fatal error: Uncaught Meilisearch InvalidResponseBodyException: Http Status: 405 thrown in /var/www/html/vendor/meilisearch/meilisearch-php/src/Http/Client.php on line 186

    This error dont giving in meilisearch itself servise (related 127.0.0.1:7700)

    VPS info:

    4 cores | RAM 8 GB | 100 GB (100% NVMe) | 200 Mbit/s

    Also i connect meilisearch from php with docker

    Docker conf is:

    meilisearch:
              image: 'getmeili/meilisearch:latest'
              ports:
              - '7700:7700'
              volumes:
              - './Docker/meilisearch/volume/:/meili_data'
              networks:
                customnetwork:
                  ipv4_address: 172.20.0.13
              healthcheck:
                  test: ["CMD", "wget", "--no-verbose", "--spider",  "5"]
                  retries: 3
                  timeout: 5s
    

    Connection define is :

    <?php
    
    MEILISEARCH_CONNECT = 'http://172.20.0.13:7700';
    
    const MEILISEARCH_MASTER_KEY = 'masterKey';
    
    const MEILISEARCH_INDEX_KEY = 'products';
    
    • OS: [Ubuntu 22]
    • Meilisearch version: [v.0.28.1]
    • meilisearch-php version: [packagist v0.24.0]
    bug needs investigation needs more info 
    opened by rzakhanov 27
  • Guzzle 7

    Guzzle 7

    I am trying to install meilisearch-laravel-scout in my project. This project is using Guzzle 7 because of other dependencies. If I understand it correctly the option in meilisearch-php exists to use another HTTP Client, but this other HTTP Client can not be Guzzle 7. Reason being that the Guzzle 7 requirement conflicts with the php-http/guzzle6-adapter requirement for Guzzle 6.

    Is there a way to use meilisearch-php with Guzzle 7?

    opened by sanderbaas 24
  • Improve the search() method

    Improve the search() method

    Hi everyone ๐Ÿ‘‹

    Small issue here (more a feature idea in fact), after using the search() method recently, I've faced a use case where a SearchResult object could be a good idea: sorting hits.

    Actually, we can easily sort hits via native functions but it force use to grab the hits key, sort and put back it on the result array, it works but thinking on terms of DX, that's probably not an "easy" way of doing it.

    So, the idea is to add a new class and update the search method:

        public function search($query, array $options = [], bool $asObject = false) // The return typehint cannot be specified until PHP 8
        {
            $parameters = array_merge(
                ['q' => $query],
                $options
            );
    
            $result = $this->http->post(self::PATH.'/'.$this->uid.'/search', $parameters);
    
            return $asObject ? SearchResult::create($result) : $result;
        }
    

    Here's the SearchResult that I'm thinking about:

    <?php
    
    declare(strict_types=1);
    
    namespace MeiliSearch;
    
    use ArrayIterator;
    use function array_filter;
    use function array_key_exists;
    use function count;
    use function end;
    use function is_array;
    
    final class SearchResult
    {
        /**
         * @var array<int, array>
         */
        private $hits = [];
    
        /**
         * @var int
         */
        private $offset;
    
        /**
         * @var int
         */
        private $limit;
    
        /**
         * @var int
         */
        private $nbHits;
    
        /**
         * @var bool
         */
        private $exhaustiveNbHits = false;
    
        /**
         * @var int
         */
        private $processingTimeMs;
    
        /**
         * @var string
         */
        private $query;
    
        /**
         * @var bool|null
         */
        private $exhaustiveFacetsCount;
    
        /**
         * @var array<string, mixed>
         */
        private $facetsDistribution;
    
        public static function create(array $result): SearchResult
        {
            $self = new self();
    
            // Build the object using the array
    
            return $self;
        }
    
        /**
         * {@inheritdoc}
         */
        public function filter(callable $callback): SearchResult
        {
            $results = array_filter($this->hits, $callback, ARRAY_FILTER_USE_BOTH);
    
            $this->hits = $results;
            $this->nbHits = count($results);
    
            return $this;
        }
    
        public function getHit(int $key, $default = null)
        {
            return $this->hits[$key] ?? $default;
        }
    
        /**
         * @return array<int, array>
         */
        public function getHits(): array
        {
            return $this->hits;
        }
    
        public function getOffset(): int
        {
            return $this->offset;
        }
    
        public function getLimit(): int
        {
            return $this->limit;
        }
    
        public function getNbHits(): int
        {
            return $this->nbHits;
        }
    
        public function getExhaustiveNbHits(): bool
        {
            return $this->exhaustiveNbHits;
        }
    
        public function getProcessingTimeMs(): int
        {
            return $this->processingTimeMs;
        }
    
        public function getQuery(): string
        {
            return $this->query;
        }
    
        public function getExhaustiveFacetsCount(): ?bool
        {
            return $this->exhaustiveFacetsCount;
        }
    
        /**
         * @return array<string, mixed>
         */
        public function getFacetsDistribution(): array
        {
            return $this->facetsDistribution;
        }
    
        /**
         * {@inheritdoc}
         */
        public function toArray(): array
        {
            return [
                'hits' => $this->hits,
                'offset' => $this->offset,
                'limit' => $this->limit,
                'nbHits' => $this->nbHits,
                'exhaustiveNbHits' => $this->exhaustiveNbHits,
                'processingTimeMs' => $this->processingTimeMs,
                'query' => $this->query,
                'exhaustiveFacetsCount' => $this->exhaustiveFacetsCount,
                'facetsDistribution' => $this->facetsDistribution,
            ];
        }
    
        /**
         * {@inheritdoc}
         */
        public function getIterator(): ArrayIterator
        {
            return new ArrayIterator($this->hits);
        }
    
        /**
         * {@inheritdoc}
         */
        public function count(): int
        {
            return $this->nbHits;
        }
    }
    
    

    The interesting method here is:

        /**
         * {@inheritdoc}
         */
        public function filter(callable $callback): SearchResult
        {
            $results = array_filter($this->hits, $callback, ARRAY_FILTER_USE_BOTH);
    
            $this->hits = $results;
            $this->nbHits = count($results);
    
            return $this;
        }
    

    This one allows to filter the hits and return a filtered result without triggering a new search (a method retry() could trigger a new search if needed).

    Of course, this class is not required as the developer can always retrieve an array but it could act as an helper when advanced use cases occurs and we need to mutate the result before playing with it.

    Let me know if this improvements is a good idea and if it fits the current lib API, thanks for the feedback and have a great day ๐Ÿ™‚

    PS: Maybe the current API can be mutated to add a third argument in search (typed callable) that allows us to filter the result before retrieving it and without using an object if a new class is not an option.

    SDK PHP breaking-change 
    opened by Guikingone 23
  • 502 Bad Gateway

    502 Bad Gateway

    Description I have meilisearch/meilisearch-php ^0.22.0

    When I run the following command in the terminal: php artisan scout:import "App\Models\Place"

    I get 502 Bad Gateway: image

    It was working, but suddenly this error started to show..

    Here's how my model looks like: image

    opened by vgavrilovikj 21
  • Replace HttpClientDiscovery with Psr18ClientDiscovery

    Replace HttpClientDiscovery with Psr18ClientDiscovery

    As discussed in #76, instead of using HttpClientDiscovery::find() within the Http\Client, we should use Psr18ClientDiscovery::find(). This allows us to a variety of HTTP Clients such as:

    • kriswallsmith/buzz
    • php-http/curl-client
    • symfony/http-client with nyholm/psr7
    • guzzle6-adapter
    • guzzle7 with http-interop/http-factory-guzzle
    opened by bensherred 15
  • getDocuments fatal error

    getDocuments fatal error

    Description Line of code like: $client->index('movies')->getDocuments(['limit' => 2]); not returning array, but showing error:

    Expected behavior Return array of index items

    Current behavior Fatal error: Uncaught TypeError: MeiliSearch\Endpoints\Indexes::getDocuments(): Argument #1 ($options) must be of type ?MeiliSearch\Contracts\DocumentsQuery, array given, called in /app/index.php on line 25 and defined in /app/vendor/meilisearch/meilisearch-php/src/Endpoints/Delegates/HandlesDocuments.php:22

    When in HandlesDocuments.php I've changed:

        public function getDocuments(DocumentsQuery $options = null): DocumentsResults
        {
            $query = isset($options) ? $options->toArray() : [];
            $response = $this->http->get(self::PATH.'/'.$this->uid.'/documents', $query);
    
            return new DocumentsResults($response);
        }
    

    to

        public function getDocuments($options): DocumentsResults
        {
            //$query = isset($options) ? $options->toArray() : [];
            $response = $this->http->get(self::PATH.'/'.$this->uid.'/documents', $options);
    
            return new DocumentsResults($response);
        }
    

    then returns protect object with data

    MeiliSearch\Contracts\DocumentsResults::__set_state(array(
       'data' => 
      array (
        0 => 
        array (
          'id' => 'some1',
          'title' => 'some1',
        ),
        1 => 
        array (
          'id' => 'some2',
          'title' => 'some2',
        ),
      ),
       'offset' => 0,
       'limit' => 2,
       'total' => 100,
    ))
    

    Environment (please complete the following information):

    • OS: DOCKER
    • Meilisearch version: [v.0.28.0]
    • meilisearch-php version: [v0.24.0]
    bug 
    opened by vitalijm 12
  • How do you install MeiliSearch without composer

    How do you install MeiliSearch without composer

    Problem

    Given this stackoverflow question where the user is is stuck because he does not use composer (still too hard for him to grasp), I would like to know if there is a way we can install MeiliSearch without composer?

    I understand the problem lies with the http-client, so the guy in the stackoverflow tried to install it like this:

    include './search/guzzle7/src/Client.php';
    include './search/guzzle7/src/Promise.php';
    include './search/meilisearchPhp/src/MeiliSearch.php';
    include './search/meilisearchPhp/src/Client.php';
    

    But it did not work.

    Finding a solution

    Is there a way to make it work?

    Also, alternatively, stripe suggests a manual installation on their README of their PHP client. Would we be able to reproduce something like this?

    Motivations

    PHP is commonly used in the very beginner js-php-mysql stack and I would like for us to be usable by developers of every level.

    Why Stripe allows not to use composer: https://github.com/stripe/stripe-php/issues/138

    help wanted 
    opened by bidoubiwa 12
  • Frequent crashes with

    Frequent crashes with "Wrong parameters for MeiliSearch\Exceptions\ApiException"

    As ironic as it is, it seems ApiException creation fails due to invalid parameters and crashes.

    Here's an image of the stack trace from Sentry: image

    Seems like Client.php uses invalid order for the params in parseResponse error handler.

    ---- Update: Nevermind, it seems like the order of parameters is correct for the ApiException constructor. I'll try to investigate further.

    On a sidenote: we're using PHP 7.4.

    opened by Tarpsvo 11
  • More fine grained exceptions

    More fine grained exceptions

    Hi all,

    The current implementation of HTTPRequestException is to vague and of course allows you to build on it but maybe it's nice to have the more fine grained exceptions already in the package https://github.com/meilisearch/MeiliSearch/blob/master/meilisearch-core/src/error.rs, https://github.com/meilisearch/MeiliSearch/blob/master/meilisearch-error/src/lib.rs .

    Wanted to start with this contribution but wanted first to ask you guys if that is ok and if you agree with it?

    opened by devrck 11
  • Use PSR Interfaces instead of guzzle

    Use PSR Interfaces instead of guzzle

    This PR replace the fixed guzzle implementation with psr interfaces, so the developer can choose the used http client.

    We need to update the docs or should install a default client. Currently the user need to install the following packages to use guzzle.

    "guzzlehttp/psr7": "^1.6",
    "guzzlehttp/guzzle": "~6.0",
    "php-http/guzzle6-adapter": "^2.0",
    "http-interop/http-factory-guzzle": "^1.0"
    

    By default this PR used an auto discovery to find possible http clients. To define the used http client manually the user need to provide an PSR HttpClient, an PSR Request Factory and a PSR Stream Factory as optional constructor parameters.

    Closes #11

    opened by Zeichen32 11
  • Change casing of `MeiliSearch` to `Meilisearch`

    Change casing of `MeiliSearch` to `Meilisearch`

    Pull Request

    Related issue

    Fixes #<issue_number>

    What does this PR do?

    This PR changes the casing from MeiliSearch to Meilisearch.

    To my surprise I discovered that PHP namespaces and classes are case insensitive and therefore recasing Meilisearch is possible. Therefore this change should not be breaking. I did some tests with the library and everything worked fine

    See:

    • https://www.php.net/manual/en/language.namespaces.rationale.php#:~:text=Note%3A%20Namespace%20names%20are%20case%2Dinsensitive.
    • https://sebhastian.com/is-php-case-sensitive/

    PR checklist

    Please check if your PR fulfills the following requirements:

    • [ ] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)?
    • [x] Have you read the contributing guidelines?
    • [x] Have you made sure that the title is accurate and descriptive of the changes?

    Thank you so much for contributing to Meilisearch!

    enhancement 
    opened by mmachatschek 10
  • Add matching strategy option to search options

    Add matching strategy option to search options

    Description In meilisearch documentation we have matching strategy option. I couldn't find any usage of it in the vendor code or any other examples.

    Basic example I have a search which needs to find exact characters and i can't make it phrase search cause it won't show any of already returning hits. I can't put a limit as well cause I have different lengthed results. For example I type '1R220' it's shows approximetily 1000 hits just because it searchs for '1'.

    Maybe there is another workaround?

    opened by FatimaMazhit 0
  • Rename Meilisearch class to maintain autoload compatibility

    Rename Meilisearch class to maintain autoload compatibility

    #431 Renamed the namespace from MeiliSearch to Meilisearch, which isn't a problem because the Composer config was also updated to allow PSR-4 matching of both cases.

    The problem is that the class MeiliSearch\MeiliSearch was also renamed to Meilisearch\Meilisearch, not just the namespace. This breaks Composer autoloading because Composer class-name matching is case-sensitive.

    This PR fixes the name of this class in order to maintain compatibility.

    If the renaming of the that class is both intentional and permanent:

    • the README should be updated with a notice
    • the version number should be incremented by at least a new point release (0.27.x) instead of sub-point (0.26.1 is not ideal to make a breaking change)

    If you need a quick fix for laravel/scout or other projects, composer require meilisearch/meilisearch-php "0.26.0" should do the trick.

    opened by n8man 2
  • Class

    Class "MeiliSearch\MeiliSearch" not found

    Description php artisan scout:import <model-class>

    "laravel/scout": "^9.7",
    "meilisearch/meilisearch-php": "^0.26.1",
    

    Expected behavior Use Meilisearch\Meilisearch on Laravel Scout

    Current behavior Uses wrong class.

    Screenshots or Logs If applicable, add screenshots or logs to help explain your problem.

    Environment (please complete the following information):

    • OS: Linux
    • Meilisearch version: latest
    • meilisearch-php version: 0.26.1
    opened by francoism90 2
  • Update phpstan/phpstan requirement from 1.9.3 to 1.9.7

    Update phpstan/phpstan requirement from 1.9.3 to 1.9.7

    Updates the requirements on phpstan/phpstan to permit the latest version.

    Release notes

    Sourced from phpstan/phpstan's releases.

    1.9.7

    Bleeding edge ๐Ÿ”ช

    If you want to see the shape of things to come and adopt bleeding edge features early, you can include this config file in your project's phpstan.neon:

    includes:
    	- vendor/phpstan/phpstan/conf/bleedingEdge.neon
    

    Of course, there are no backwards compatibility guarantees when you include this file. The behaviour and reported errors can change in minor versions with this file included. Learn more

    Improvements ๐Ÿ”ง

    Bugfixes ๐Ÿ›

    Function signature fixes ๐Ÿค–

    Internals ๐Ÿ”

    Commits
    • 0501435 PHPStan 1.9.7
    • 707c831 Updated PHPStan to commit d279f388f5a1cb7a6f821dbecc4052a9ebbb8417
    • 23daeff Updated PHPStan to commit 091fcafb07ac0b3eb261285c049d9c0f214a535c
    • 1a28725 Updated Composer baseline
    • af72eaa Updated PHPUnit baseline
    • c0d39c1 Updated PHPStan to commit 28c2c79b16cac6ba6b01f1b4d211541dd49d8a77
    • 45dbb01 Updated PHPStan to commit 752baaf49f65586b79ab24d5beb4b385c65a281c
    • 7f88292 Updated PHPStan to commit 02753c6883677edd87d40f397f057daddd103a05
    • b4c0d3f Updated PHPStan to commit 6debffdb5892f7fb311a60634ec9cda79b6e3154
    • 92ac649 Reproduce progress bar crash if all passed paths to analyse are excluded
    • Additional commits viewable in compare view

    You can trigger a rebase of this PR by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    skip-changelog dependencies 
    opened by dependabot[bot] 0
  • Changes related to the next Meilisearch release (v1.0.0)

    Changes related to the next Meilisearch release (v1.0.0)

    Related to this issue: https://github.com/meilisearch/integration-guides/issues/230

    This PR:

    • gathers the changes related to the next Meilisearch release (v1.0.0) so that this package is ready when the official release is out.
    • should pass the tests against the latest pre-release of Meilisearch.
    • might eventually contain test failures until the Meilisearch v1.0.0 is out.

    โš ๏ธ This PR should NOT be merged until the next release of Meilisearch (v1.0.0) is out.

    This PR is auto-generated for the pre-release week purpose.

    opened by meili-bot 0
  • Update code-samples

    Update code-samples

    This PR is auto-generated.

    Update the code-samples.meilisearch.yml according to the integration-guides issue for more information and the complete description about what should be done here check that issue.

    :warning: Check the global issue before implementing the code-samples. The issue may have changed since the last time.

    documentation skip-changelog 
    opened by meili-bot 0
Releases(v0.26.1)
  • v0.26.1(Dec 16, 2022)

    ๐Ÿš€ Enhancements

    • Change casing of MeiliSearch to Meilisearch (#431) @mmachatschek

    โš ๏ธ If you handle ::class directly, a change is required, as pointed out https://github.com/meilisearch/meilisearch-php/pull/431#issuecomment-1365760201

    Thanks again to @brunoocasali and @mmachatschek! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.26.0(Nov 28, 2022)

    This version makes this package compatible with Meilisearch v0.30.0 :tada: Check out the changelog of Meilisearch v0.30.0 for more information on the changes.

    ๐Ÿš€ Enhancements

    Add support to finite pagination (#418) @brunoocasali

    Now you can call:

    • $client.search('batman', [ 'page' => 1, 'hitsPerPage' => 10 ])
    • $client.search('batman', [ 'hitsPerPage' => 10 ])
    • $client.search('batman', [ 'page' => 4 ])

    results = $client.search('batman', [ 'page' => 4 ])

    And get a limited pagination with a fixed number of total hits in the results object results['totalHits'].

    You can still use the offset/limit by calling $client.search('batman', [ 'limit' => 4, 'offset' => 10 ]) SearchResult#hitsCount can still retrieve the total hits value.

    Add cancelTasks method (#420) @brunoocasali
    Allow users to cancel a processing or an enqueued task by using `cancelTasks(CancelTasksQuery $query)`
    // CancelTasksQuery methods:
    setNext(int $next)
    setTypes(array $types)
    setStatuses(array $statuses)
    setIndexUids(array $indexUids)
    setUids(array $uids)
    setCanceledBy(array $canceledBy)
    setBeforeEnqueuedAt(\DateTime $date)
    setAfterEnqueuedAt(\DateTime $date)
    setBeforeStartedAt(\DateTime $date)
    setAfterStartedAt(\DateTime $date)
    setBeforeFinishedAt(\DateTime $date)
    setAfterFinishedAt(\DateTime $date)
    
    Add swapIndexes method (#422) @brunoocasali
    Add a new method in the Client client->swapIndexes(array $indexes) to swap indexes. The array should follow this structure: [['indexA', 'indexB'], ['indexC', 'indexD'], ...]
    Add deleteTasks method (#423) @brunoocasali
    Allow users to delete processed, failed, and canceled tasks.

    A new method deleteTasks(DeleteTasksQuery $query)

    // DeleteTasksQuery methods:
    setNext(int $next)
    setTypes(array $types)
    setStatuses(array $statuses)
    setIndexUids(array $indexUids)
    setUids(array $uids)
    setCanceledBy(array $canceledBy)
    setBeforeEnqueuedAt(\DateTime $date)
    setAfterEnqueuedAt(\DateTime $date)
    setBeforeStartedAt(\DateTime $date)
    setAfterStartedAt(\DateTime $date)
    setBeforeFinishedAt(\DateTime $date)
    setAfterFinishedAt(\DateTime $date)
    

    โš ๏ธ Breaking Changes

    • Add and Update filters to the tasks resource. (#419) @brunoocasali
      • Added setUids(array<int>) filter to match by Task.uid.
      • Added setCanceledBy(array<int>) filter to match by Task.canceledBy
      • Added setBeforeEnqueuedAt(\DateTime) filter to match by Task.beforeEnqueuedAt
      • Added setAfterEnqueuedAt(\DateTime) filter to match by Task.AfterEnqueuedAt
      • Added setBeforeStartedAt(\DateTime) filter to match by Task.beforeStartedAt
      • Added setAfterStartedAt(\DateTime) filter to match by Task.AfterStartedAt
      • Added setBeforeFinishedAt(\DateTime) filter to match by Task.beforeFinishedAt
      • Added setAfterFinishedAt(\DateTime) filter to match by Task.AfterFinishedAt
      • โš ๏ธโš ๏ธ Renamed setUid(array) to setIndexUids(array) filter to match by Task.indexUid
      • โš ๏ธโš ๏ธ Renamed setStatus(array) to setStatuses(array<string>) filter to match by Task.status

    Thanks again to @brunoocasali ! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.25.1(Nov 26, 2022)

    ๐Ÿ“ Documentation

    • Added the current app documentation to README (#396) @yhoungdev
    • Update README.md (#400) @94noni
    • Added two new code-sample requested (#407) @Braunson
    • Add phpstan to contributing (#410) @jonatanrdsantos

    ๐Ÿš€ Enhancements

    • Allow to inject the StreamFactoryInterface explicitly (#387) @LeSuisse
    • Make possible for static analysis tools to detect return type of Indexes::search (#389) @LeSuisse
    • Enforce strong type property - related with #385 (#392) @jonatanrdsantos
    • Add PHP hosted documentation (#393) @jonatanrdsantos
    • Remove test path from phpDocumentor run (#394) @jonatanrdsantos
    • Fix phpdoc block of IndexesResults constructor (#398) @jonatanrdsantos
    • Implement methods for CSV and Ndjson batch adds (#399) @karlomikus

    ๐Ÿ› Bug Fixes

    • This will fix docs in batches sending same chunk (#386) @AntonioLeutsch
    • Bug Fix/PHP stan (#409) @brunoocasali

    ๐Ÿ’… Misc

    • Add uuids to index names for randomization (#388) @bofalke

    Thanks again to @94noni, @AntonioLeutsch, @Braunson, @LeSuisse, @bofalke, @brunoocasali, @dependabot, @dependabot[bot], @girijakar, @jonatanrdsantos, @karlomikus, and @yhoungdev! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.25.0(Oct 3, 2022)

    This version makes this package compatible with Meilisearch v0.29.0 :tada: Check out the changelog of Meilisearch v0.29.0 for more information on the changes.

    ๐Ÿš€ Enhancements

    • Ensure support to the new search query parameter matchingStrategy (#376) @brunoocasali
    • Ensure support to keys with wildcarded actions.
      • actions field during key creation now accepts wildcards on actions. For example, indexes.* provides rights to indexes.create, indexes.get,indexes.delete, indexes.delete, and indexes.update. (#377) @brunoocasali

    โš ๏ธ Breaking Changes

    This breaking change may not affect you, but in any case, you should check your search queries if you want to keep the same behavior from v0.28.

    • The NOT filter keyword does not have an implicitly EXIST operator anymore. Check out for more information: https://github.com/meilisearch/meilisearch/issues/2486
    Source code(tar.gz)
    Source code(zip)
  • v0.24.2(Aug 16, 2022)

  • v0.24.1(Aug 9, 2022)

    ๐Ÿš€ Enhancements

    • Pass $options to Indexes#allRaw method (#360) @Jared87
    • Add faceting and pagination settings (#362) @tgalopin co-authored by @eelcol (#361)
      • getFaceting, updateFaceting, resetFaceting
      • getPagination, updatePagination, resetPagination
    • Fix bad typehint on IndexesResults constructor (#357) @norkunas
    • Use the correct notation for getting documents (#358) @brunoocasali

    Thanks again to @Jared87, @brunoocasali, @eelcol, @norkunas and @tgalopin! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.24.0(Jul 11, 2022)

    This version makes this package only compatible with Meilisearch v0.28.0 :tada: Check out the changelog of Meilisearch v0.28.0 for more information on the changes.

    ๐Ÿ’ฅ Breaking changes

    :warning: Small disclaimer: The rawSearch (and other raw* functions) are a direct connection between your PHP application and Meilisearch, you may find changes that are not present in this section.

    • MeiliSearch\Client->getDumpStatus method was removed. (#336) @brunoocasali
    • MeiliSearch\Client->getIndexes method now return a object type IndexesResults. (#341), (#345) @brunoocasali
    • MeiliSearch\Client->generateTenantToken now require a String apiKeyUid which is the uid of the Key instance used to sign the token. (#343) @brunoocasali
    • MeiliSearch\Client->createDump now responds with Task object. (#336, #337) @brunoocasali
    • MeiliSearch\Client->getKeys method now return a object type KeysResults. (#343), (#338) @brunoocasali
    • MeiliSearch\Client->updateKey now can just update a description and/or name, if there are other key/value will be silently ignored. (#343), (#338) @brunoocasali
    • MeiliSearch\Client->getTasks method now return a object type TasksResults. (#337), (#346) @brunoocasali
    • MeiliSearch\Index->getTasks method now return a object type TasksResults. (#337), (#346) @brunoocasali
    • MeiliSearch\Index->search facetsDistribution is now facets (#332) @curquiza
    • MeiliSearch\Index->search matches is now showMatchesPosition (#332) @curquiza
    • MeiliSearch\Index->getDocuments method now return a object type DocumentsResults.
    • MeiliSearch\Index->getDocuments method now accepts a object as a parameter and offset, limit, attributesToRetrieve were not longer accepted.
    • exhaustiveNbHits, facetsDistribution, exhaustiveFacetsCount were removed from SearchResult. (#332) @curquiza

    ๐Ÿš€ Enhancements

    • MeiliSearch\Client->getIndexes accepts a object IndexesQuery to filter and paginate the results.
    • MeiliSearch\Client->getKeys accepts a object KeysQuery to filter and paginate the results. (#343), (#338) @brunoocasali
    • MeiliSearch\Client->getKey accepts both a Key#uid or Key#key value. (#343), (#338) @brunoocasali
    • MeiliSearch\Client->getTasks accepts a object TasksQuery to filter and paginate the results. (#337), (#346) @brunoocasali
    • MeiliSearch\Index->getTasks accepts a object TasksQuery to filter and paginate the results. (#337), (#346) @brunoocasali
    • MeiliSearch\Client->createKey can specify a uid (optionally) to create a new Key. (#343), (#338) @brunoocasali
    • MeiliSearch\Index->getDocument accepts a fields list to compact the remap the response. (#340), (#344) @brunoocasali
    • MeiliSearch\Index->getDocuments accepts a object DocumentsQuery to filter and paginate the results. (#340), (#344) @brunoocasali
    • Key has now a name and uid string fields. (#343), (#338) @brunoocasali
    • estimatedTotalHits, facetDistribution were added to SearchResult (#332) @curquiza
      • nbHits is still defined and will contain the same value as estimatedTotalHits.
    • Sending a invalid uid or apiKey will raise InvalidApiKeyException. (#343) @brunoocasali

    Thanks again to @brunoocasali, @curquiza! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.23.3(Jun 21, 2022)

    ๐Ÿš€ Enhancements

    • Improve Docker configuration in the package (#328) @brunoocasali

    ๐Ÿ› Bug Fixes

    • Fix errors assigning bool to DateTime properties in Keys (#326) @Nextra

    Thanks again to @Nextra, @brunoocasali ! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.23.2(May 9, 2022)

    This version makes this package compatible with Meilisearch v0.27.0๐ŸŽ‰ Check out the changelog of Meilisearch v0.27.0 for more information about the changes.

    ๐Ÿš€ Enhancements

    • Add new methods for the new typo tolerance settings #316 @alallema index.getTypoTolerance() index.updateTypoTolerance(params) index.resetTypoTolerance()
    • Ensure nested field support #317 @alallema
    • Add new search parameters highlightPreTag, highlightPostTag and cropMarker #318 @alallema

    ๐Ÿ› Bug Fixes

    • Fix getKeys method (#323) @alallema
    Source code(tar.gz)
    Source code(zip)
  • v0.23.1(Mar 17, 2022)

  • v0.23.0(Mar 14, 2022)

    This version makes this package compatible with MeiliSearch v0.25 up to v0.26.0 ๐ŸŽ‰ Check out the changelog of MeiliSearch v0.26.0 for more information about the โš ๏ธ Breaking changes about the flag and dump new behavior. (#292)

    โš ๏ธ Breaking changes

    • Make settings and synonyms be classes so they can be serialized properly (#281) @jonatanrdsantos
    • Changes the Keys Class (#298) @alallema

    ๐Ÿš€ Enhancements

    • Added new method generateTenantToken() as a result of the addition of the multi-tenant functionality. This method creates a JWT tenant token that will allow the user to have multi-tenant indexes and thus restrict access to documents based on the end-user making the search request. (#297) @alallema

    Thanks again to @TeddyBear06, @alallema, @jonatanrdsantos! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.22.0(Feb 14, 2022)

    This package version is compatible with MeiliSearch v0.25.0

    โš ๏ธ Breaking changes

    • Drop PHP 7.3 support (#284) @mmachatschek

    ๐Ÿš€ Enhancements

    • Add typed properties and more typed parameters to methods (#285) @mmachatschek
    • Add a function to respond with the full qualified version for the PHP SDK: "Meilisearch PHP (v0.21.0)" (#293) @brunoocasali
    • Add new feature: Analytics (#294) @brunoocasali

    Thanks again to @alallema, @brunoocasali, @mmachatschek and @shahlin! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.21.0(Jan 12, 2022)

    This package version is compatible with MeiliSearch v0.25.0 (#370)

    โš ๏ธ Breaking changes

    • This package is only compatible with MeiliSearch v0.25.0 and later, but not with v0.24.0 and older. Be sure you are using at least MeiliSearch v0.25.0 or newer before doing the upgrade. Why isn't it compatible?
      • MeiliSearch v0.25.0 uses Authorization header instead of X-Meili-API-Key (#265)
      • MeiliSearch v0.25.0 has a new API regarding the updates that have been renamed into tasks. More details in the following points
    • Remove deleteIndexIfExists method (#266) @alallema
    • Remove getOrCreateIndex method (#267) @alallema
    • Redesign update API to task API (#268) @alallema
      • All the actions on indexes are now asynchronous check out the task API references and the asynchronous tasks guide
        • createIndex(), updateIndex(), deleteIndex() are now asynchrone and return a task response instead of an Index.
        • index.create and index.delete from index return a task.
        • waitForPendingUpdate() is renamed into waitForTask and is accessible from index and from client.
        • the current index.waitForTask() method call /tasks/:uid
        • index.getUpdateStatus is renamed index.getTask
        • index.getAllUpdateStatus is renamed index.getTasks
        • new method client.waitForTask() call /tasks/:uid
        • new method client.waitForTask()
        • new method client.getTasks that calls /tasks
        • new method client.getTask that calls /tasks/:uid Notes: The only two methods that now return an Index are client.index() and client.getIndex()
    • Change client.getKeys does not return an object of keys, but an array of keys. Check out keys API references.
    • Changes related to the next MeiliSearch release (v0.25.0) (#261)

    ๐Ÿš€ Enhancements

    • Extract functionality to a more specific class (#272) @jonatanrdsantos
    • Addition related to API keys (#269) @alallema
      • Granular management of API keys is now added to MeiliSearch. New methods have been created to manage this:
        • http.patch use by updateKey
        • client.getKey get information about a specific API key.
        • client.createKey create a new API key.
        • client.deleteKey delete an API key.
        • client.updateKey update an API key.
      • Check out the documentation guide.

    Thanks again to @alallema, @curquiza, @jonatanrdsantos, @norkunas, and Jonatan Santos! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.20.0(Nov 17, 2021)

    โš ๏ธ Breaking changes

    This package version is compatible with MeiliSearch v0.24.0 and later, but not with v0.23.1 and older. Be sure you are using at least MeiliSearch v0.24.0 or newer before doing the upgrade.

    ๐Ÿš€ Enhancements

    • Add getRawIndex method to client (#234) @kjellknapen
    • Add createdAt and updatedAt to Indexes (#237) @srichter
    • Add PHP 8.1 support (#247) @mheap

    Thanks again to @Hard-Coder05, @Sukriti-sood, @alallema, @almasaeed2010, @curquiza, @edinapap, @kjellknapen, @mheap, @srichter and Kjell Knapen! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.19.3(Nov 16, 2021)

    โš ๏ธ Since this release is breaking for a user using MeiliSearch v0.23.1 or older and only work for v0.24.0 or later, we abandoned it. If you are using MeiliSearch v0.23.1 or older, please still use meilisearch-php v0.19.2 If you are using MeiliSearch v0.24.0 or newer, please still use meilisearch-php v0.20.0 Sorry for this!

    This package version is compatible with MeiliSearch v0.24.0

    ๐Ÿš€ Enhancements

    • Add getRawIndex method to client (#234) @kjellknapen
    • Add createdAt and updatedAt to Indexes (#237) @srichter
    • Add PHP 8.1 support (#247) @mheap

    Thanks again to @Hard-Coder05, @Sukriti-sood, @alallema, @almasaeed2010, @curquiza, @edinapap, @kjellknapen, @mheap, @srichter and Kjell Knapen! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.19.2(Oct 12, 2021)

    This package version is compatible with MeiliSearch v0.23.0

    Changes

    • Add method deleteIndexIfExists() (#226) @bofalke
    • Add method addDocumentsInBatches(array $documents, ?int $batchSize = 1000, ?string $primaryKey = null) (#229) @bofalke
    • Add method updateDocumentsInBatches(array $documents, ?int $batchSize = 1000, ?string $primaryKey = null) (#229) @bofalke
    • Add method to getAllRawIndexes() (#228) @kjellknapen
    • News methods New format handling CSV NDJSON (#235) @alallema
      • Add new index method addDocumentsJson(string $documents, ?string $primaryKey = null)
      • Add new index method addDocumentsNdJson(string $documents, ?string $primaryKey = null)
      • Add new index method addDocumentsCsv(string $documents, ?string $primaryKey = null)

    Bugs

    • Fixing issue when send synonyms as empty array (#208) @alallema
    • Check response Content-Type header in HTTP client (#219) @srichter
    • Refactors TimeOutException (fixing unreachable code) and increase test coverage (#221) @srichter

    Thanks again to @AbihaFatima, @alallema, @bofalke, @curquiza, @kjellknapen, @srichter, and Kjell Knapen! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.19.1(Sep 13, 2021)

    This package version is compatible with MeiliSearch v0.22.0 ๐ŸŽ‰

    Changes

    • Add sort feature compatibility (#200) @alallema. More about sorting.
      • Add sortable attributes methods: get_sortable_attributes, set_sortable_attributes, reset_sortable_attributes.
      • Add sort parameter during search.

    Thanks again to @alallema, @aocneanu, @curquiza! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.19.0(Aug 24, 2021)

    This version makes this package compatible with MeiliSearch v0.21.0 ๐ŸŽ‰ Check out the changelog of MeiliSearch v0.21.0

    Changes

    • Update WaitForPendingUpdate (#189) @alallema
    • Changes related to the next MeiliSearch release (v0.21.0) (#161)

    Breaking changes โš ๏ธ

    • Rename buildDate into commitDate (#191)
    • Rename fieldsDistribution into fieldDiestribution (#191)
    • Rename attributesForFaceting into filterableAttributes (#190) @alallema

    Bug

    • Use json throw on error flag (#185) @norkunas

    Thanks again to @alallema, @bidoubiwa, and @norkunas! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.18.3(Jun 30, 2021)

  • v0.18.2(Jun 1, 2021)

    Changes

    • Fix ApiException constructor crashing when HTTP body is empty (#174) @Tarpsvo

    Thanks again to @Tarpsvo, @bidoubiwa, @curquiza ! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.18.1(May 24, 2021)

  • v0.18.0(Apr 29, 2021)

    Changes

    • Remove php 7.2 support (#166) @codedge

    Thanks to @codedge, @ppshobi and @Guikingone for their involvement in this repository for this release! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.17.2(Apr 26, 2021)

  • v0.17.1(Apr 12, 2021)

  • v0.17.0(Mar 2, 2021)

    Breaking changes โš ๏ธ

    • Should throw exception if httpBody empty (#146) @jwohlfert23
    • Rename MeiliSearch\HTTPRequestException into MeiliSearch\ApiException (#143) @claudiunicolaa
    • Add MeiliSearch\Exceptions\CommunicationException (#144) @claudiunicolaa

    Thanks again to @claudiunicolaa, @jwohlfert23 ! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.16.0(Jan 21, 2021)

    Sorry for all the breaking changes, our goal is to make this package as good and easy-to-use as possible! If you have any trouble, feel free to open an issue in the repo. We will glad to guide you through all these changes!

    Breaking changes โš ๏ธ

    • The search() method has now the following prototype: public function search($query, array $searchParams = [], array $options = []) The usage is described in the Wiki. (#120) @Guikingone

    • The search() method now returns a instance of SearchResult ex: $index->search('prince')->getHits() Please check the README and the Wiki to know how to use it! ๐Ÿ’ก If you still want to get an Array as a return, use rawSearch() or set the $option parameter to ['raw' => true]. (#120) @Guikingone

    • $client->getIndex() is still present but does an HTTP call. This method should be only used to fetch information from the MeiliSearch instance, not to manipulate an Index object in your code base. Use index() instead. See the Getting Started to be sure using this SDK the most optimized way. (#124) @curquiza

    • $client->updateIndex returns an Index instance. (#124) @curquiza

    • $index->getPrimaryKey() does not do any HTTP call, but only returns the primaryKey attribute. Use $index->fetchPrimaryKey() if you want the same behavior as the old $index->getPrimaryKey() (#124) @curquiza

    • $index->show() is removed and replaced by $index->fetchInfo() (returns an instance) and $index->fetchRawInfo() (returns an array) (#124) @curquiza

    • $client->showIndex($uid) is removed. Use $client->getIndex($uid) (returns an instance) or $client->index($uid)->fetchRawInfo() (returns an array) instead. (#124) @curquiza

    Changes

    • The SearchResult instance contains the new methods described in this section of the Wiki. (#120) @Guikingone and (#134) @curquiza

    • Add the rawSearch() method (#134) @curquiza This method has the same behavior as the "old" search() method: it returns the raw response sent by the MeiliSearch in an Array.

    • Introduction of the $client->index($uid) method that replaces $client->getIndex($uid). getIndex() is still available but does HTTP call, so this should be only used to fetch information from the MeiliSearch instance. See our Getting Started to use this package the right way (#124) @curquiza

    • New attribute in the Index class: primaryKey accessible via the getter $index->getPrimaryKey() (#124) @curquiza

    • New method $index->fetchRawInfo(): returns an array of index (#124) @curquiza

    • New method $index->fetchInfo(): returns an Index instance (#124) @curquiza

    Thanks again to @Guikingone, @ppshobi, @bidoubiwa and @curquiza ! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.15.1(Nov 4, 2020)

    Changes

    • This package is now compatible with the new release of MeiliSearch (v0.16.0) without any breaking changes (#111) @curquiza
    • Add PHP 8 Support (#116) @szainmehdi

    Thanks again to @szainmehdi! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.15.0(Oct 14, 2020)

    Changes

    • Add dumps methods (#106) @shokme Related docs: https://docs.meilisearch.com/references/dump.html#dumps

    Breaking changes โš ๏ธ

    • Remove the ability to replace Response and Request Factories (#100) @ppshobi
    • Update delete index to always return an array (#104) @pedroxido

    Thanks again to @pedroxido, @ppshobi and @shokme! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
  • v0.14.2(Sep 28, 2020)

  • v0.14.1-alpha0(Sep 23, 2020)

    Changes

    • Replace HttpClientDiscovery with Psr18ClientDiscovery (#88) @bensherred => meiliseach-php is now compatible with the latest version of Guzzle (^7) without any breaking!

    Thanks to @bensherred, @ppshobi and @shokme! ๐ŸŽ‰

    Source code(tar.gz)
    Source code(zip)
Owner
MeiliSearch
Meili provides an open-source Instant Search Engine
MeiliSearch
Elastica is a PHP client for elasticsearch

Elastica: elasticsearch PHP Client All documentation for Elastica can be found under Elastica.io. If you have questions, don't hesitate to ask them on

Nicolas Ruflin 2.2k Dec 23, 2022
PHP Solr client library

Solarium PHP Solr Client Library What is Solarium? Solarium is a PHP Solr client library that accurately models Solr concepts. Where many other Solr l

Solarium PHP library organization 902 Dec 30, 2022
Official PHP low-level client for Elasticsearch.

elasticsearch-php Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in PHP; because

elastic 5k Jan 1, 2023
Build and execute an Elasticsearch search query using a fluent PHP API

PACKAGE IN DEVELOPMENT, DO NOT USE YET Build and execute ElasticSearch queries using a fluent PHP API This package is a lightweight query builder for

Spatie 94 Dec 14, 2022
This modules provides a Search API Backend for Elasticsearch.

Search API ElasticSearch This modules provides a Search API Backend for Elasticsearch. This module uses the official Elasticsearch PHP Client. Feature

null 1 Jan 20, 2022
Consulta os รญndices de correรงรฃo do Banco Central via API

รndices correรงรฃo Banco Central Realiza a consulta dos รญndices de correรงรฃo atravรฉs da API do Banco Central. Instalaรงรฃo composer require valbert/indices

Matheus Valbert 1 Nov 8, 2022
A fully featured full text search engine written in PHP

TNTSearch TNTSearch is a full-text search (FTS) engine written entirely in PHP. A simple configuration allows you to add an amazing search experience

TNT Studio 2.9k Jan 8, 2023
A php trait to search laravel models

Searchable, a search trait for Laravel Searchable is a trait for Laravel 4.2+ and Laravel 5.0 that adds a simple search function to Eloquent Models. S

Nicolรกs Lรณpez Jullian 2k Dec 27, 2022
ScoutAPM PHP Agent for the Laravel Framework

Scout Laravel APM Agent Monitor the performance of PHP Laravel applications with Scout's PHP APM Agent. Detailed performance metrics and transaction t

Scout APM 22 Jan 2, 2023
This script was made to aid the process of migrating PHP and MySQL based websites

This script was made to aid the process of migrating PHP and MySQL based websites. Works with most common CMSes.

interconnect/it 3.9k Jan 5, 2023
PHP SDK for the Sellix Developers API (developers.sellix.io)

PHP SDK for the Sellix Developers API (developers.sellix.io). Quickly get started and create products, payments and more using PHP.

Sellix 7 Nov 23, 2022
OpenAI API Client is a component-oriented, extensible client library for the OpenAI API. It's designed to be faster and more memory efficient than traditional PHP libraries.

OpenAI API Client in PHP (community-maintained) This library is a component-oriented, extensible client library for the OpenAI API. It's designed to b

Mounir R'Quiba 6 Jun 14, 2023
Rinvex Authy is a simple wrapper for @Authy TOTP API, the best rated Two-Factor Authentication service for consumers, simplest 2fa Rest API for developers and a strong authentication platform for the enterprise.

Rinvex Authy Rinvex Authy is a simple wrapper for Authy TOTP API, the best rated Two-Factor Authentication service for consumers, simplest 2fa Rest AP

Rinvex 34 Feb 14, 2022
Best resources restful api for developers (with JSON:API standar specification design)

List API Best resources restful api for developers (with JSON:API standar specification design). API Resource Endpoint Name Resource Description Al Qu

Noval 2 Jan 18, 2022
Google-api-php-client - A PHP client library for accessing Google APIs

Google APIs Client Library for PHP Reference Docs https://googleapis.github.io/google-api-php-client/main/ License Apache 2.0 The Google API Client Li

Google APIs 8.4k Dec 30, 2022
Google Translator Api Wrapper For Php Developers.

Google Translator Api Wrapper For Php Developers.

Roldex Stark 2 Oct 12, 2022
This package makes it easy for developers to access WhatsApp Cloud API service in their PHP code.

The first PHP API to send and receive messages using a cloud-hosted version of the WhatsApp Business Platform

NETFLIE 135 Dec 29, 2022
The swiss army knife for Magento developers, sysadmins and devops. The tool provides a huge set of well tested command line commands which save hours of work time. All commands are extendable by a module API.

netz98 magerun CLI tools for Magento 2 The n98 magerun cli tools provides some handy tools to work with Magento from command line. Build Status Latest

netz98 758 Dec 28, 2022
Best resources restful api for developers

Best resources restful api for developers (with JSON:API standar specification design).

Noval 2 Jan 18, 2022
The best profanity filter for chat with api for plugin developers!

xqwtxon/ProfanityFilter is moving on ReinfyTeam/ProfanityFilter ProfanityFilter ?? A best profanity filter for pocketmine. Controls hate speech and bl

Ace Sobremont 4 Jul 11, 2022