122 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace WapplerSystems\Meilisearch\System\Meilisearch\Service;
 | 
						|
 | 
						|
/***************************************************************
 | 
						|
 *  Copyright notice
 | 
						|
 *
 | 
						|
 *  (c) 2009-2017 Timo Hund <timo.hund@dkd.de>
 | 
						|
 *  All rights reserved
 | 
						|
 *
 | 
						|
 *  This script is part of the TYPO3 project. The TYPO3 project is
 | 
						|
 *  free software; you can redistribute it and/or modify
 | 
						|
 *  it under the terms of the GNU General Public License as published by
 | 
						|
 *  the Free Software Foundation; either version 3 of the License, or
 | 
						|
 *  (at your option) any later version.
 | 
						|
 *
 | 
						|
 *  The GNU General Public License can be found at
 | 
						|
 *  http://www.gnu.org/copyleft/gpl.html.
 | 
						|
 *
 | 
						|
 *  This script is distributed in the hope that it will be useful,
 | 
						|
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
 *  GNU General Public License for more details.
 | 
						|
 *
 | 
						|
 *  This copyright notice MUST APPEAR in all copies of the script!
 | 
						|
 ***************************************************************/
 | 
						|
 | 
						|
use WapplerSystems\Meilisearch\System\Logging\MeilisearchLogManager;
 | 
						|
use WapplerSystems\Meilisearch\System\Meilisearch\ResponseAdapter;
 | 
						|
use Solarium\QueryType\Extract\Query;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class MeilisearchWriteService
 | 
						|
 */
 | 
						|
class MeilisearchWriteService extends AbstractMeilisearchService
 | 
						|
{
 | 
						|
    const EXTRACT_SERVLET = 'update/extract';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Performs a content and meta data extraction request.
 | 
						|
     *
 | 
						|
     * @param Query $query An extraction query
 | 
						|
     * @return array An array containing the extracted content [0] and meta data [1]
 | 
						|
     */
 | 
						|
    public function extractByQuery(Query $query)
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $response = $this->createAndExecuteRequest($query);
 | 
						|
            return [$response->file, (array)$response->file_metadata];
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            $param = $query->getRequestBuilder()->build($query)->getParams();
 | 
						|
            $this->logger->log(
 | 
						|
                MeilisearchLogManager::ERROR,
 | 
						|
                'Extracting text and meta data through Meilisearch Cell over HTTP POST',
 | 
						|
                [
 | 
						|
                    'query' => (array)$query,
 | 
						|
                    'parameters' => $param,
 | 
						|
                    'file' => $query->getFile(),
 | 
						|
                    'query url' => self::EXTRACT_SERVLET,
 | 
						|
                    'exception' => $e->getMessage()
 | 
						|
                ]
 | 
						|
            );
 | 
						|
        }
 | 
						|
 | 
						|
        return [];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Deletes all index documents of a certain type and does a commit
 | 
						|
     * afterwards.
 | 
						|
     *
 | 
						|
     * @param string $type The type of documents to delete, usually a table name.
 | 
						|
     * @param bool $commit Will commit immediately after deleting the documents if set, defaults to TRUE
 | 
						|
     */
 | 
						|
    public function deleteByType($type, $commit = true)
 | 
						|
    {
 | 
						|
        $this->deleteByQuery('type:' . trim($type));
 | 
						|
 | 
						|
        if ($commit) {
 | 
						|
            $this->commit(false, false);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a delete document based on a query and submit it
 | 
						|
     *
 | 
						|
     * @param string $rawQuery Expected to be utf-8 encoded
 | 
						|
     * @return ResponseAdapter
 | 
						|
     */
 | 
						|
    public function deleteByQuery($rawQuery) {
 | 
						|
        $query = $this->client->createUpdate();
 | 
						|
        $query->addDeleteQuery($rawQuery);
 | 
						|
        return $this->createAndExecuteRequest($query);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Add an array of Meilisearch Documents to the index all at once
 | 
						|
     *
 | 
						|
     * @param array $documents Should be an array of \WapplerSystems\Meilisearch\System\Meilisearch\Document\Document instances
 | 
						|
     * @return ResponseAdapter
 | 
						|
     */
 | 
						|
    public function addDocuments($documents)
 | 
						|
    {
 | 
						|
        $update = $this->client->createUpdate();
 | 
						|
        $update->addDocuments($documents);
 | 
						|
        return $this->createAndExecuteRequest($update);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Send a commit command.  Will be synchronous unless both wait parameters are set to false.
 | 
						|
     *
 | 
						|
     * @param boolean $expungeDeletes Defaults to false, merge segments with deletes away
 | 
						|
     * @param boolean $waitSearcher Defaults to true, block until a new searcher is opened and registered as the main query searcher, making the changes visible
 | 
						|
     * @return ResponseAdapter
 | 
						|
     */
 | 
						|
    public function commit($expungeDeletes = false, $waitSearcher = true)
 | 
						|
    {
 | 
						|
        $update = $this->client->createUpdate();
 | 
						|
        $update->addCommit(false, $waitSearcher, $expungeDeletes);
 | 
						|
        return $this->createAndExecuteRequest($update);
 | 
						|
    }
 | 
						|
}
 |