13

Web サイトのフロント ページに検索ボックスを作成したいのですが、 Solrを使用して作成する方法がわかりません。私のウェブサイトはすべてSymfony2で開発されています。検索にデータベースは使用しません。

どうすればこれを行うことができますか?.

私のプロジェクトSolrバンドルでは、これを使用します:

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

ベース小枝ファイル:

<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;

}

しかし、これがrenderされているtwigファイルでは、何を書くのかわかりません。

4

4 に答える 4

2

https://github.com/nelmio/NelmioSolariumBundle を使用してsolariumの実装を使用できます

より良い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"forin"を使用して、solrドキュメントを表示します

于 2013-01-26T15:10:56.823 に答える
0

このようなことを試してください。

Controlloer.php:

public function searchAction($templateName = '')
{
    // ------
    // ------

    $resultset = $solrObject->offsetGet('response');

    // Do some error checks

    return array('resultset'=>$resultset);

}

小枝:

<ul>
{% for doc in resultset %}
  <li> {{ doc.name }} </li>
{% endfor %}
</ul>
于 2013-01-22T12:21:57.807 に答える
0

私はまだ試していませんが、Symfony2 でこの新しいJobeet チュートリアルを試してみることができます。このチュートリアルでは、システムの構築方法とその中​​での Solr の使用方法について説明しています。
これが助けになることを願っています。

于 2013-09-24T12:51:16.037 に答える
0

経由でGETパラメータを取得します

$searchName = $request->query->get('search_name');

しかし、これには $request 変数が必要です。これをパラメータとして使用し、メソッド シグネチャを次のように変更できます。

public function anagraficaAction(Request $request)

このようにして、メソッドで $request パラメーターを呼び出すことができます。

もう 1 つの方法は、メソッド内で現在のコントローラーの要求を取得することです。

$request = $this->get('request');

これを使用して、setParameter を次のように変更できます。

setParameter('名前', $searchName)

于 2013-10-02T13:06:00.357 に答える