elastic/site-search

Elastic Site Search Official PHP Client

1.0.5 2024-03-12 10:43 UTC

This package is auto-updated.

Last update: 2024-11-08 16:27:58 UTC


README

Elastic Site Search Logo

GitHub release CircleCI build Dependencies status

A first-party PHP client for the Elastic Site Search API.

Contents

Getting started 🐣

Using this client assumes that you have already created a Site Search account on https://www.elastic.co/products/site-search.

You can install the client in your project by using composer:

composer require elastic/site-search

Usage

Configuring the client

Basic client instantiation

To instantiate a new client you can use \Elastic\SiteSearch\Client\ClientBuilder:

  $apiKey        = 'XXXXXXXXXXXX';
  $clientBuilder = \Elastic\SiteSearch\Client\ClientBuilder::create($apiKey);

  $client = $clientBuilder->build();

Notes:

  • The resulting client will be of type \Elastic\SiteSearch\Client\Client

  • You can find the API endpoint and your API key URL in your Site Search account: https://app.swiftype.com/settings/account.

  • The Site Search PHP client does not support authentication through Engine Key as described in the documentation.

Basic usage

Retrieve or create an engine

Most methods of the API require that you have access to an Engine.

To check if an Engine exists and retrieve its configuration, you can use the Client::getEngine method :

  $engine = $client->getEngine('my-engine');

If the Engine does not exists yet, you can create it by using the Client::createEngine method :

  $engine = $client->createEngine('my-engine', 'en');

The second parameter ($language) is optional or can be set to null. Then the Engine will be created using the universal language. The list of supported language is available here : https://swiftype.com/documentation/site-search/overview#language-optimization

Document types

When using Site Search every document has an associated DocumentType.

You can list available document types in an engine by using the Client::listDocumentTypes method:

  $documentTypes = $client->listDocumentTypes('my-engine');

In order to index documents you need to create at least one DocumentType in your engine. This can be done by using the Client::createDocumentType` method:

  $documentType = $client->createDocumentType('my-engine', 'my-document-type');

Index some documents

In order to index some documents in the Engine you can use the Client::createOrUpdateDocuments method:

    $documents = [
      [
        'external_id' => 'first-document',
        'fields'      => [
          ['name' => 'title', 'value' => 'First document title', 'type' => 'string'],
          ['name' => 'content', 'value' => 'Text for the first document.', 'type' => 'string'],
        ]
      ],
      [
        'external_id' => 'other-document',
        'fields'      => [
          ['name' => 'title', 'value' => 'Other document title', 'type' => 'string'],
          ['name' => 'content', 'value' => 'Text for the other document.', 'type' => 'string'],
        ]
      ],
    ];

    $indexingResults = $client->createOrUpdateDocuments('my-engine', 'my-document-type', $documents);

Notes:

Search

In order to search in your Engine you can use the Client::search method :

    $searchResponse = $client->search('my-engine', 'fulltext search query');

An optional $searchRequestParams can be used to pass additional parameters to the Search API endpoint (pagination, filters, facets, ...):

    $searchParams = ['per_page' => 10, 'page' => 2];
    $searchResponse = $client->search('my-engine', 'fulltext search query', $searchParams);

Allowed params are :

Clients methods

Development

Code for the endpoints is generated automatically using a custom version of OpenAPI Generator.

To regenerate endpoints, use the docker laucher packaged in vendor/bin:

./vendor/bin/elastic-openapi-codegen.sh

The custom generator will be built and launched using the following Open API spec file : resources/api/api-spec.yml.

You can then commit and PR the modified api-spec file and your endpoints code files.

The client class and readme may be changed in some cases. Do not forget to include them in your commit!

FAQ 🔮

Where do I report issues with the client?

If something is not working as expected, please open an issue.

Where can I find the full API documentation ?

Your best bet is to read the documentation.

Where else can I go to get help?

You can checkout the Elastic community discuss forums.

Contribute 🚀

We welcome contributors to the project. Before you begin, a couple notes...

License 📗

Apache 2.0 © Elastic

Thank you to all the contributors!