加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 搜索框在Symfony2与Solr

发布时间:2020-12-13 13:52:33 所属栏目:PHP教程 来源:网络整理
导读:我想在我的网站的首页创建搜索框,但我不知道如何使用Solr创建一个.我所有的网站都是在Symfony2开发的.我不使用数据库进行搜索. 我该怎么办? 在我的项目中,Solr bundle使用这个: use SolrClient;use SolrQuery;use SolrObject;use SolrDocument;use SolrInp
我想在我的网站的首页创建搜索框,但我不知道如何使用Solr创建一个.我所有的网站都是在Symfony2开发的.我不使用数据库进行搜索.

我该怎么办?

在我的项目中,Solr bundle使用这个:

use SolrClient;
use SolrQuery;
use SolrObject;
use SolrDocument;
use SolrInputDocument;

在基本的twig文件中:

<form action="{{ path("home_search") }}" method="get">
  <input type="search" name="search"><br>
  <input type="submit" value="search">
</form>

我的控制器的一些例子:

public function searchAction($templateName = '')
{
 $solrService = $this->get('rocket.solr_service');

    $solrQuery = new SolrQuery('*:*');
    $solrQuery->addField('id')
        ->addField('name');


    if (!empty($templateName)) {
        $solrQuery->addFilterQuery(sprintf('name:"%s" OR design_template_tag_name:"%1$s" OR design_category_name:"%1$s"',$templateName));
    }


    $solrQuery->setRows(1000);

    $solrObject = $solrService->query(
        'RocketBraPrintBundle:DesignTemplate',$solrQuery,SolrService::WRITER_FORMAT_SOLR_OBJECT
    );

    $templates = $solrObject->offsetGet('response')->offsetGet('docs');
    if (!$templates) {

        if (!empty($templateName)) {
            $this->setFlash('catalog-message','No results found for your search.');
            return $this->searchDesignTemplates($categoryTreeSlug,$productFamilyFaceId);
        }

        return array();
    }

    return $templates;

}

但是在这个渲染的twig文件中,我不知道我会写什么.

您可以使用日光灯实施 https://github.com/nelmio/NelmioSolariumBundle

真的很好,更好的solr查询

我已经用它了

这里是一个样本

$query = 'foo';

    $page = 1;
    if (array_key_exists('page',$params)) {
        $page = (int) $params['page'];
    }
    $rows = 10;
    if (array_key_exists('limit',$params)) {
        $rows = (int) $params['limit'];
    }

    $solarium = $this->get('solarium.client');

    //select
    $select = $solarium->createSelect();
    $escapedQuery = $select->getHelper()->escapePhrase($query);

    //dismax
    $dismax = $select->getDisMax();
    // override the default setting of 'dismax' to enable 'edismax'
    $dismax->setQueryParser('edismax');
    //fields
    $dismax->setQueryFields(
                    array('title^5','description^0.7'));

    $select->setQuery($escapedQuery);

    //limit
    $select->setRows($rows);
    $select->setStart(($page - 1) * $rows);

    //type spot only
    $select->createFilterQuery('typeFilter')
            ->setQuery(sprintf('type:%s','spot'));

    $resultset = $solarium->select($select);

使用foreach或twig“在”显示您的solr文档

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读