gpt4 book ai didi

symfony - 将Elastica与PagerFanta和动态querybuilder一起使用

转载 作者:行者123 更新时间:2023-12-03 02:03:59 24 4
gpt4 key购买 nike

我有一个使用symfony2 / doctrine2 / elastica / fosElasticaBundle / pagerFanta的应用程序。

我想结合使用pagerfanta和elastica的自定义和动态queryBuilder。不是转换结果,而是对其进行预过滤。

到目前为止,我能够:
1.通过我的自定义queryBuilder单独使用pagerfanta:

    $page = $request->get('page', 1);
$search = $request->get('search');
$querybuilder = $this->getDoctrine()->getRepository('AppBundle:FoodAnalytics\Recipe')->findByTopCategoryQueryBuilder($category);
$explorerManager = $this->get('explorer_manager');
$pagerFanta = $explorerManager->getPagerFanta($querybuilder, $page, 4);
$recipes = $pagerFanta->getCurrentPageResults();
  • 将Elastica与Pagerfanta一起使用,但不使用我的自定义QueryBuilder:
    $page = $request->get('page', 1);
    $search = $request->get('search');
    $finder = $this->container->get('fos_elastica.finder.website.recipe');
    $pagerFanta = $finder->findPaginated($search);
    $recipes = $pagerFanta->getCurrentPageResults();

  • 现在,如何还可以使用自定义QueryBuilder?我知道您可以在elastica配置中设置一个自定义参数,但是我的必须是动态的=接受一个参数,所以我想在 Controller 中进行设置。那可能吗 ?

    最佳答案

    您可以pass custom Elastica\Query to findPaginated 方法:

    $query = new \Elastica\Query::create(new \Elastica\Query\Term(array(
    'name' => $request->get('search')
    ));
    $finder = $this->container->get('fos_elastica.finder.website.recipe');
    $pagerFanta = $finder->findPaginated($query);
    $recipes = $pagerFanta->getCurrentPageResults();

    也许代码更清晰了,当您仅使用不带FOSElasticaBundle的 PagerFanta with ElasticaAdapter时,您可以看到其工作方式:
    // Searchable can be any valid searchable Elastica object. For example a Type or Index
    $finder = new \Elastica\Index($elasticaClient, 'website.recipe');
    // A Query can be any valid Elastica query (json, array, Query object)
    $query = new \Elastica\Query::create(new \Elastica\Query\Term(array(
    'name' => $request->get('search')
    ));

    $elasticaAdapter = new \Pagerfanta\Adapter\ElasticaAdapter($finder, $query);
    $paginator = new \Pagerfanta\Pagerfanta($elasticaAdapter);
    $results = $paginator
    ->setMaxPerPage($limit)
    ->setCurrentPage($page)
    ->getCurrentPageResults();

    关于symfony - 将Elastica与PagerFanta和动态querybuilder一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28634983/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com