Запись в базу Elasticsearch через PHP (Symfony)

167
08 марта 2019, 05:20

Мне нужно записывать в базу такие поля как id, accessToken, refreshToken. Подскажите пожалуйста как можно это сделать средствами Symfony.

Entity:

<?php
namespace App\Portmone\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Search\Mapping\Annotations as MAP;
/***@ORM\Entity(repositoryClass="App\Repository\TransactionEntityRepository")
* @MAP\ElasticSearchable(index="portmone", type="transaction", source=true)
*/
class TransactionEntity
{
 /**
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * @MAP\ElasticField(type="integer", includeInAll=true)
 */
private $id;
public function getId(): ?int
{
    return $this->id;
}

/**
 * @ORM\Column(type="integer")
 * @MAP\ElasticField(type="integer", includeInAll=true, boost=5.0)
 */
private $sourceCardId;
public function getSourceCardId()
{
    return $this->sourceCardId;
}
public function setSourceCardId(int $sourceCardId)
{
    $this->sourceCardId = $sourceCardId;
    return $this;
}
/**
 * @ORM\Column(type="integer")
 * @MAP\ElasticField(type="integer", includeInAll=true, boost=5.0)
 */
private $destinationCardId;
public function getDestinationCardId()
{
    return $this->sourceCardId;
}
public function setDestinationCardId(int $destinationCardId)
{
    $this->destinationCardId = $destinationCardId;
    return $this;
}
/**
 * @ORM\Column(type="float")
 * @MAP\ElasticField(type="float", includeInAll=true, boost=5.0)
 */
private $transferredMoney;
public function getTransferredMoney(): ?float
{
    return $this->transferredMoney;
}
public function setTransferredMoney(float $transferredMoney): self
{
    $this->transferredMoney = $transferredMoney;
    return $this;
}
/**
 * @ORM\Column(type="datetime")
 * @MAP\ElasticField(type="date", includeInAll=true, boost=5.0)
 */
private $transactionDate;
public function getTransactionDate()
{
    return $this->transactionDate;
}
public function setTransactionDate($transactionDate)
{
    $this->transactionDate = $transactionDate;
    return $this;
}

}

Answer 1

Первым делам необходимо создать соответствующий маппинг в ES. Тут, наверное, останавливаться нет смысла. В документации много примеров.

Далее Симфони:

composer.json:

...
"require": {
    ...
    "ruflin/elastica": "dev-master"
    ...
},

config/services.yaml

parameters:
    elastic:
        host: 127.0.0.1
        port: 9200
services:
    Elastica\Client:
        arguments:
            - '%elastic%'
    App\Controller\HomeController:
        arguments:
            - '@Elastica\Client'
        public: true

Контроллер:

<?php
namespace App\Controller;
use Elastica\Client;
use Elastica\Document;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
/**
 * Class HomeController
 * @package App\Controller
 */
class HomeController
{
    /**
     * @var Client
     */
    private $client;
    /**
     * HomeController constructor.
     *
     * @param Client $client
     */
    public function __construct(Client $client)
    {
        $this->client = $client;
    }
    /**
     * @return Response
     */
    public function indexAction(): Response
    {
        $document = new Document('1', [
            'id' => 1,
            'accessToken' => 'accessTokenValue',
            'refreshToken' => 'refreshTokenValue',
        ], '_doc');
        $res = $this->client->getIndex('test')->addDocuments([$document]);
        return Response::create($res);
    }
    /**
     * @param Request $request
     *
     * @return Response
     */
    public function queryAction(Request $request): Response
    {
        $query = new \Elastica\Query($request->query->get('query'));
        $res = $this->client->getIndex('test')->search($query);
        $ress = $res->getResponse()->getData();
        return Response::create(json_encode($ress));
    }
}

Вы должны понимать, что это простой пример, возможно, вы в своей структуре организуете модели и прочее.

READ ALSO
where like нескольких условий php

where like нескольких условий php

Подскажите пожалуйста, есть код который ищет имя в таблице:

140
Instagram URL signature expired

Instagram URL signature expired

Занимаюсь парсингом постов инстаграмаЧерез некоторое время ссылки на посты становятся недействительными и даже получить пост по PrimaryKey...

410
Вывод товаров по фильтру bitrix [закрыт]

Вывод товаров по фильтру bitrix [закрыт]

проблема возникла в том, что нужно по отдельной ссылке выводить только акционные товары на этой же страницеФильтр выводится аяксовым методом...

169
проблема с загузкой файлов на сервер

проблема с загузкой файлов на сервер

Через какое то время работы сервера возникает ошибка при загрузке файлов

140