Полнотекстовый поиск в mongodb в Symfony 3.4 - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь использовать полнотекстовый поиск в mongodb:

db.Product.createIndex({"name": "text"})
db.Product.find({$text: {$search: "xxxxx"}})

как использовать это в контроллере для Symfony?

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Спасибо за все ответы. Таким образом, контроллер для поисковой системы выглядит следующим образом:

class SearchController extends Controller
{
  public function searchBarAction()
  {
    $form = $this->createFormBuilder(null)
        ->setMethod('GET')
        ->add('search', TextType::class)
        ->getForm();

    return $this->render('AppBundle:Components:_searchBar.html.twig', [
        'form' => $form->createView()
    ]);
 }

/**
 * @param Request $request
 */
public function handleSearchAction(Request $request)
{

    $searchData = $request->query->get('form')['search'];


    $dbName = 'ece';
    $connection = $this->container->get('doctrine_mongodb')->getConnection();
    $mongo = $connection->getMongo();
    $db = $mongo->selectDB($dbName);

    $resultSetProduct = $db->Product->find([
        '$text' => ['$search' => $searchData]
    ]);

    $resultSet = $db->MainData->find([
        '$text' => ['$search' => $searchData]
    ]);

    $itemProduct =  $resultSetProduct->count();
    $itemSet = $resultSet->count() + $itemProduct;


    return $this->render('search/index.html.twig', [
        'searchData' => $searchData,
        'resultSetProduct' => $resultSetProduct,
        'itemProduct' => $itemProduct,
        'itemSet' => $itemSet,
        'resultSet' => $resultSet

    ]);
 }
}
0 голосов
/ 04 января 2019

Прежде всего, создайте сущность Product (настройте в соответствии с вашими потребностями)

<?php

/**
 * @Document
 * @Index(keys={"name"="text"})
 */
class Product
{
    /** @Id */
    public $id;

    /** @Field(type="string") */
    public $name;

    /** @Field(type="float") */
    public $price;
}

Посмотрите на $name и @Index аннотацию

Затем используйте метод text () построителя запросов

// Run a text search against the index
$qb = $dm->createQueryBuilder('Product')
    ->text('words you are looking for');

Более подробную информацию вы можете найти здесь

Другой способ - создать собственный запрос с помощью expr () из конструктора запросов doctrine

...