Индекс ElasticSearch не работает с Symfony 4 - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь использовать ElasticSearch для индексации своих статей (в настоящее время используется демонстрационный проект Symfony).Я использую "ruflin/elastica": "^6.1" bundle.

Я проверил индекс на kibana, и он работает, но мой контроллер, кажется, не взаимодействует правильно с ES:

BlogController.php:

use Elastica\Query;
use Elastica\Client;
use Elastica\Query\BoolQuery;
use Elastica\Query\MultiMatch;
/**
 * @Route("/search", methods={"GET"}, name="blog_search")
 */
public function search(Request $request, Client $client): Response
{
    if (!$request->isXmlHttpRequest()) {
        return $this->render('blog/search.html.twig');
    }

    $query = $request->query->get('q', '');
    $limit = $request->query->get('l', 10);

    $match = new MultiMatch();
    $match->setQuery($query);
    $match->setFields(["title"]);

    $bool = new BoolQuery();
    $bool->addMust($match);

    $elasticaQuery = new Query($bool);
    $elasticaQuery->setSize($limit);

    $foundPosts = $client->getIndex('blog')->search($elasticaQuery);
    $results = [];
    foreach ($foundPosts as $post) {
        $results[] = $post->getSource();
    }

    return $this->json($results);
}

Это класс, который я использовал для индексации своих статей:

ArticleIndexer.php:

namespace App\Elasticsearch;

use App\Entity\Post;
use App\Repository\PostRepository;
use Elastica\Client;
use Elastica\Document;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

class ArticleIndexer
{
private $client;
private $postRepository;
private $router;

public function __construct(Client $client, PostRepository $postRepository, UrlGeneratorInterface $router)
{
    $this->client = $client;
    $this->postRepository = $postRepository;
    $this->router = $router;
}

public function buildDocument(Post $post)
{
    return new Document(
        $post->getId(), // Manually defined ID
        [
            'title' => $post->getTitle(),
            'summary' => $post->getSummary(),
            'author' => $post->getAuthor()->getFullName(),
            'content' => $post->getContent(),

            // Not indexed but needed for display
            'url' => $this->router->generate('blog_post', ['slug' => $post->getSlug()], UrlGeneratorInterface::ABSOLUTE_PATH),
            'date' => $post->getPublishedAt()->format('M d, Y'),
        ],
        "article" // Types are deprecated, to be removed in Elastic 7
    );
}

public function indexAllDocuments($indexName)
{
    $allPosts = $this->postRepository->findAll();
    $index = $this->client->getIndex($indexName);

    $documents = [];
    foreach ($allPosts as $post) {
        $documents[] = $this->buildDocument($post);
    }

    $index->addDocuments($documents);
    $index->refresh();
}
}

Я могурезультаты моего исследования не получены, и у меня нет ошибок, поэтому я не знаю, что я пропустил в своей конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...