Skip to content
Snippets Groups Projects

Clean up API client and Milvus Backend, getting them closer to working state

Open Scott Euser requested to merge issue/search_api_milvus-3403280:1.0.x into 1.0.x
Files
2
@@ -2,9 +2,9 @@
namespace Drupal\search_api_milvus\Plugin\search_api\backend;
use Drupal\Component\Serialization\Json;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\PluginFormInterface;
use Drupal\Component\Serialization\Json;
use Drupal\search_api\Backend\BackendPluginBase;
use Drupal\search_api\IndexInterface;
use Drupal\search_api\Item\ItemInterface;
@@ -21,14 +21,14 @@ use Drupal\search_api\SearchApiException;
* description = @Translation("Indexes items using the Milvus API.")
* )
*/
class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInterface {
class SearchApiMilvusBackend extends BackendPluginBase implements PluginFormInterface {
use PluginFormTrait;
/**
* Milvus API client instance.
*
* @var \Probots\milvus\Client
* @var \Drupal\search_api_milvus\MilvusApiClient
*/
protected $milvusClient;
@@ -39,13 +39,6 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
*/
protected $milvusIndexId;
/**
* The key repository.
*
* @var \Drupal\key\KeyRepositoryInterface
*/
protected $keyRepository;
/**
* {@inheritdoc}
*/
@@ -54,6 +47,7 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
'milvus_host' => '',
'milvus_port' => '',
'milvus_version' => '/api/v1',
'milvus_key' => '',
];
}
@@ -85,6 +79,14 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
'#required' => TRUE,
];
$form['milvus_key'] = [
'#type' => 'textfield',
'#title' => $this->t('Key'),
'#description' => $this->t('The milvus API key.'),
'#default_value' => $this->configuration['milvus_key'],
'#required' => TRUE,
];
return $form;
}
@@ -94,17 +96,17 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
try {
if ($milvus_client = $this->getMilvusClient()) {
$response = $milvus_client->index()->list();
// This would throw an exception if it fails.
$milvus_client->checkHealth();
}
}
catch (\Exception $e) {
$message = $this->t('Wrong key or cluster url: @message', [
'@message' => $e->getMessage(),
]);
$form_state->setErrorByName('key', $message);
$form_state->setErrorByName('cluster_url', $message);
$form_state->setErrorByName('additional_headers', $message);
$form_state->setErrorByName('milvus_key', $message);
$form_state->setErrorByName('milvus_host', $message);
}
}
@@ -133,7 +135,6 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
*/
public function addIndex(IndexInterface $index) {
if ($milvus_client = $this->getMilvusClient()) {
$index_id = $this->getMilvusIndexId($index->id());
if ($milvus_client->schema()->get()->getClasses()->isEmpty()) {
$milvus_client->schema()->create([
'class' => $index->id(),
@@ -161,7 +162,7 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
$replicas = $settings['replicas'];
$pod_type = $settings['pod_type'];
$response = $milvus_client->index($this->getMilvusIndexId($index->id()))->configure($pod_type, $replicas);
$milvus_client->index($this->getMilvusIndexId($index->id()))->configure($pod_type, $replicas);
}
}
}
@@ -173,7 +174,7 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
if (is_object($index)) {
try {
if ($milvus_client = $this->getMilvusClient()) {
$response = $milvus_client->index($this->getMilvusIndexId($index->id()))->delete();
$milvus_client->index($this->getMilvusIndexId($index->id()))->delete();
}
}
catch (\Exception $e) {
@@ -190,7 +191,6 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
foreach ($items as $id => $item) {
try {
$index = $item->getIndex();
$vectors = [];
$metas = [];
$objects = [];
@@ -205,13 +205,13 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
$objects[] = [
'id' => \Drupal::service('uuid')->generate(),
'class' => $this->getMilvusIndexId($index_id),
'class' => $this->getMilvusIndexId($index->id()),
'vector' => $vectors,
'properties' => $metas,
];
}
$this->client->batch()->create($objects);
$this->getMilvusClient()->batch()->create($objects);
$indexed[] = $id;
}
catch (\Exception $e) {
@@ -247,9 +247,9 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
}
}
$this->client->objects()->create([
$milvus_client->objects()->create([
'id' => \Drupal::service('uuid')->generate(),
'class' => $this->getMilvusIndexId($index_id),
'class' => $this->getMilvusIndexId($index->id()),
'vector' => $vectors,
'properties' => $metas,
]);
@@ -273,7 +273,7 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
public function deleteItems(IndexInterface $index, array $item_ids) {
try {
if ($milvus_client = $this->getMilvusClient()) {
$response = $milvus->index($this->getMilvusIndexId($index->id()))->vectors()->delete($item_ids);
$milvus_client->index($this->getMilvusIndexId($index->id()))->vectors()->delete($item_ids);
}
}
catch (\Exception $e) {
@@ -287,7 +287,7 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
public function deleteAllIndexItems(IndexInterface $index, $datasource_id = NULL) {
try {
if ($milvus_client = $this->getMilvusClient()) {
$milvus_client->schema()->delete($this->getMilvusIndexId($index_id));
$milvus_client->schema()->delete($this->getMilvusIndexId($index->id()));
}
}
catch (\Exception $e) {
@@ -295,20 +295,6 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
}
}
/**
* Helper function to obtain the milvus API key.
*
* @return string
* The milvus API key.
*/
protected function getMilvusApiKey() {
if ($key = $this->configuration['key']) {
if ($key_object = $this->keyRepository->getKey($key)) {
return $key_object->getKeyValue();
}
}
}
/**
* Helper function to gets the milvus client.
*
@@ -318,11 +304,13 @@ class SearchApimilvusBackend extends BackendPluginBase implements PluginFormInte
protected function getMilvusClient() {
if (!isset($this->milvusClient)) {
try {
if ($api_key = $this->getMilvusApiKey()) {
$cluster_url = $this->configuration['cluster_url'];
$additional_headers = json_decode($this->configuration['additional_headers']);
$this->milvusClient = new milvus($cluster_url, $api_key, $additional_headers);
}
// @todo dependency injection.
/** @var \Drupal\search_api_milvus\MilvusApiClient */
$this->milvusClient = \Drupal::service('search_api_milvus.api_client');
$this->milvusClient->setHost($this->configuration['milvus_host']);
$this->milvusClient->setPort($this->configuration['milvus_port']);
$this->milvusClient->setVersion($this->configuration['milvus_version']);
$this->milvusClient->setKey($this->configuration['milvus_key']);
}
catch (\Exception $e) {
$message = t('There was a problem connecting to the milvus API please check your credentials: @message', [
Loading