Skip to content

Commit

Permalink
Merge pull request #11 from typesense/ts-0.18.0-support
Browse files Browse the repository at this point in the history
Support for TS Server 0.18.0 features
  • Loading branch information
jasonbosco authored Dec 29, 2020
2 parents 88dada1 + 31c9b02 commit ce22229
Show file tree
Hide file tree
Showing 11 changed files with 468 additions and 19 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ Typesense use [HTTPlug](http://httplug.io/). List of clients & adapters [here](h

| Typesense Server | typesense-php |
|------------------|----------------|
| \>= v0.16.0 | \>= v4.2.0 |
| \>= v0.18.0 | \>= v4.4.0 |
| \>= v0.17.0 | \>= v4.2.0 |
| \>= v0.16.0 | \>= v4.1.0 |
| \>= v0.15.0 | \>= v4.0.0 |

Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ version: '3.5'

services:
typesense:
image: typesense/typesense:0.17.0
image: typesense/typesense:0.18.0
environment:
TYPESENSE_DATA_DIR: /data
TYPESENSE_API_KEY: xyz
Expand Down
29 changes: 29 additions & 0 deletions examples/cluster_operations.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

/** @noinspection ForgottenDebugOutputInspection */

include '../vendor/autoload.php';

use Symfony\Component\HttpClient\HttplugClient;
use Typesense\Client;

try {
$client = new Client(
[
'api_key' => 'xyz',
'nodes' => [
[
'host' => 'localhost',
'port' => '8108',
'protocol' => 'http',
],
],
'client' => new HttplugClient(),
]
);
echo '<pre>';

print_r($client->operations->perform('snapshot', ['snapshot_path' => '/tmp/snapshot']));
} catch (Exception $e) {
echo $e->getMessage();
}
150 changes: 150 additions & 0 deletions examples/synonym_operations.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
<?php

include '../vendor/autoload.php';

use Symfony\Component\HttpClient\HttplugClient;
use Typesense\Client;

try {
$client = new Client(
[
'api_key' => 'xyz',
'nodes' => [
[
'host' => 'localhost',
'port' => '8108',
'protocol' => 'http',
],
],
'client' => new HttplugClient(),
]
);
echo '<pre>';
try {
print_r($client->collections['books']->delete());
} catch (Exception $e) {
// Don't error out if the collection was not found
}
echo "--------Create Collection-------\n";
print_r(
$client->collections->create(
[
'name' => 'books',
'fields' => [
[
'name' => 'title',
'type' => 'string',
],
[
'name' => 'authors',
'type' => 'string[]',
'facet' => true
],
[
'name' => 'publication_year',
'type' => 'int32',
'facet' => true,
],
[
'name' => 'ratings_count',
'type' => 'int32',
],
[
'name' => 'average_rating',
'type' => 'float',
],
[
'name' => 'image_url',
'type' => 'string',
],
],
'default_sorting_field' => 'ratings_count',
]
)
);
echo "--------Create Collection-------\n";
echo "\n";
echo "--------Upsert Synonym-------\n";
print_r(
$client->collections['books']->synonyms->upsert(
'synonym-set-1',
[
'synonyms' => ['Hunger', 'Katniss'],
]
)
);
echo "--------Upsert Synonym-------\n";
echo "\n";
echo "--------Get All Synonyms-------\n";
print_r($client->collections['books']->synonyms->retrieve());
echo "--------Get All Synonyms-------\n";
echo "\n";
echo "--------Get Single Synonym-------\n";
print_r(
$client->collections['books']->synonyms['synonym-set-1']->retrieve()
);
echo "--------Get Single Synonym-------\n";
echo "\n";
echo "--------Create Document-------\n";
print_r(
$client->collections['books']->documents->create(
[
'id' => '1',
'original_publication_year' => 2008,
'authors' => [
'Suzanne Collins',
],
'average_rating' => 4.34,
'publication_year' => 2008,
'title' => 'The Hunger Games',
'image_url' => 'https://images.gr-assets.com/books/1447303603m/2767052.jpg',
'ratings_count' => 4780653,
]
)
);
echo "--------Create Document-------\n";
echo "\n";
echo "--------Search Document, using a synonym-------\n";
print_r(
$client->collections['books']->documents->search(
[
'q' => 'Katniss',
'query_by' => 'title'
]
)
);
echo "--------Search Document, using a synonym-------\n";
echo "\n";
echo "--------Upsert 1-way synonym-------\n";
print_r(
$client->collections['books']->synonyms->upsert(
'synonym-set-1',
[
'root' => 'Katniss',
'synonyms' => ['Hunger', 'Peeta'],
]
)
);
echo "--------Upsert 1-way synonym-------\n";
echo "\n";
echo "--------Search Document, using a synonym-------\n";
// Won't return any results
print_r(
$client->collections['books']->documents->search(
[
'q' => 'Peeta',
'query_by' => 'title'
]
)
);
echo "--------Search Document, using a synonym-------\n";
echo "\n";
echo "--------Delete Synonym-------\n";
print_r(
$client->collections['books']->getSynonyms()['synonym-set-1']->delete()
);
echo "--------Delete Synonym-------\n";
echo "\n";
} catch (Exception $e) {
echo $e->getMessage();
}
8 changes: 4 additions & 4 deletions src/ApiCall.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,12 @@ class ApiCall
*/
public function __construct(Configuration $config)
{
$this->config = $config;
$this->logger = $config->getLogger();
$this->client = $config->getClient();
$this->config = $config;
$this->logger = $config->getLogger();
$this->client = $config->getClient();
static::$nodes = $this->config->getNodes();
static::$nearestNode = $this->config->getNearestNode();
$this->nodeIndex = 0;
$this->nodeIndex = 0;
$this->initializeNodes();
}

Expand Down
14 changes: 14 additions & 0 deletions src/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ class Client
*/
public Health $health;

/**
* @var Operations
*/
public Operations $operations;

/**
* @var ApiCall
*/
Expand All @@ -73,6 +78,7 @@ public function __construct(array $config)
$this->debug = new Debug($this->apiCall);
$this->metrics = new Metrics($this->apiCall);
$this->health = new Health($this->apiCall);
$this->operations = new Operations($this->apiCall);
}

/**
Expand Down Expand Up @@ -122,4 +128,12 @@ public function getHealth(): Health
{
return $this->health;
}

/**
* @return Operations
*/
public function getOperations(): Operations
{
return $this->operations;
}
}
14 changes: 14 additions & 0 deletions src/Collection.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ class Collection
*/
public Overrides $overrides;

/**
* @var Synonyms
*/
public Synonyms $synonyms;

/**
* Collection constructor.
*
Expand All @@ -47,6 +52,7 @@ public function __construct(string $name, ApiCall $apiCall)
$this->apiCall = $apiCall;
$this->documents = new Documents($name, $this->apiCall);
$this->overrides = new Overrides($name, $this->apiCall);
$this->synonyms = new Synonyms($name, $this->apiCall);
}

/**
Expand All @@ -73,6 +79,14 @@ public function getOverrides(): Overrides
return $this->overrides;
}

/**
* @return Synonyms
*/
public function getSynonyms(): Synonyms
{
return $this->synonyms;
}

/**
* @return array
* @throws TypesenseClientError|HttpClientException
Expand Down
48 changes: 48 additions & 0 deletions src/Operations.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

namespace Typesense;

use Http\Client\Exception as HttpClientException;
use Typesense\Exceptions\TypesenseClientError;

/**
* Class Operations
*
* @package \Typesense
*/
class Operations
{
public const RESOURCE_PATH = '/operations';

/**
* @var ApiCall
*/
private ApiCall $apiCall;

/**
* Alias constructor.
*
* @param ApiCall $apiCall
*/
public function __construct(ApiCall $apiCall)
{
$this->apiCall = $apiCall;
}

/**
* @param string $operationName
* @param array $queryParameters
*
* @return array
* @throws TypesenseClientError|HttpClientException
*/
public function perform(string $operationName, array $queryParameters = []): array
{
return $this->apiCall->post(
sprintf('%s/%s', static::RESOURCE_PATH, $operationName),
null,
true,
$queryParameters
);
}
}
26 changes: 13 additions & 13 deletions src/Overrides.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,15 @@ public function endPointPath(string $overrideId = ''): string
}

/**
* @param string $documentId
* @param string $overrideId
* @param array $config
*
* @return array
* @throws TypesenseClientError|HttpClientException
*/
public function upsert(string $documentId, array $config): array
public function upsert(string $overrideId, array $config): array
{
return $this->apiCall->put($this->endPointPath($documentId), $config);
return $this->apiCall->put($this->endPointPath($overrideId), $config);
}

/**
Expand All @@ -84,36 +84,36 @@ public function retrieve(): array
/**
* @inheritDoc
*/
public function offsetExists($documentId): bool
public function offsetExists($overrideId): bool
{
return isset($this->overrides[$documentId]);
return isset($this->overrides[$overrideId]);
}

/**
* @inheritDoc
*/
public function offsetGet($documentId)
public function offsetGet($overrideId)
{
if (!isset($this->overrides[$documentId])) {
$this->overrides[$documentId] = new Override($this->collectionName, $documentId, $this->apiCall);
if (!isset($this->overrides[$overrideId])) {
$this->overrides[$overrideId] = new Override($this->collectionName, $overrideId, $this->apiCall);
}

return $this->overrides[$documentId];
return $this->overrides[$overrideId];
}

/**
* @inheritDoc
*/
public function offsetSet($documentId, $value): void
public function offsetSet($overrideId, $value): void
{
$this->overrides[$documentId] = $value;
$this->overrides[$overrideId] = $value;
}

/**
* @inheritDoc
*/
public function offsetUnset($documentId): void
public function offsetUnset($overrideId): void
{
unset($this->overrides[$documentId]);
unset($this->overrides[$overrideId]);
}
}
Loading

0 comments on commit ce22229

Please sign in to comment.