2012-12-26 39 views
12

Tôi muốn tạo Hộp tìm kiếm ở trang đầu của trang web của tôi nhưng tôi không biết cách tạo một tài khoản bằng cách sử dụng Solr. Tất cả trang web của tôi được phát triển trong Symfony2. Tôi không sử dụng Cơ sở dữ liệu để tìm kiếm.Hộp tìm kiếm trong Symfony2 với Solr

Tôi có thể làm như thế nào ?.

Trong dự án của tôi Solr bó sử dụng này:

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

Trong cơ sở cành file:

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

Một số ví dụ về điều khiển của tôi:

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; 

} 

Nhưng trong twig file nơi tôi Tôi không biết mình sẽ viết gì.

+1

bó bạn đang sử dụng để kết nối và tìm kiếm trong Solr gì? –

+0

@ArtemL cảm ơn cho bình luận.Tôi đang sử dụng bó solr và cho tìm kiếm không có gì vì tôi mới trong tìm kiếm với solr. – Sid

+0

Gói nào bạn đang sử dụng chính xác? Và làm thế nào? Một số cá tuyết có thể giúp trả lời câu hỏi. –

Trả lời

0

Hãy thử một cái gì đó như thế này ..

Controlloer.php:

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

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

    // Do some error checks 

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

} 

cành lá:

<ul> 
{% for doc in resultset %} 
    <li> {{ doc.name }} </li> 
{% endfor %} 
</ul> 
1

bạn có thể sử dụng https://github.com/nelmio/NelmioSolariumBundle với sử dụng triển khai nắng

Thực sự tuyệt vời cho tốt hơn truy vấn solr

tôi đã sử dụng nó

đây một mẫu

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

sử dụng foreach hoặc cành lá "trong phần" để hiển thị Solr bạn doc

+0

Tôi có phòng tắm nắng được thiết lập và tôi có thể thực hiện các truy vấn như được hiển thị tuy nhiên tôi đang đấu tranh để thử và lập chỉ mục các tài liệu của mình. Tôi có một đối tượng chú thích Symfony2 và tôi có một phương thức toSolrDocument (\ Solarium_Document_ReadWrite $ doc) để dịch tài liệu như được trình bày trong bài thuyết trình của Xavier Briand. Tuy nhiên, khi tôi gọi nó như vậy foreach ($ tờ như tờ $) { $ tài liệu [] = $ sheet-> toSolrDocument ($ update-> createDocument()); } Tôi nhận được 'Solarium_Document_ReadWrite' không tìm thấy bất kỳ ý tưởng làm thế nào để giải quyết vấn đề này? –

+0

Thật kỳ lạ, Bạn có chắc chắn rằng thư viện phòng tắm nắng của bạn nằm trong lib nhà cung cấp của bạn không? Hãy chắc chắn rằng bạn sử dụng solarium 2.4.x, phát hành cuối cùng 3.x sử dụng php 5.3 không gian tên –

+0

Tôi giải quyết vấn đề bằng cách loại bỏ các yêu cầu cho lớp readwrite. Tuy nhiên, tôi có một vấn đề mới có nhiều lõi. Tôi đã thiết lập nhiều lõi trong cài đặt ví dụ solr của mình và thêm lõi mà tôi yêu cầu vào cấu hình symfony2 của mình, bằng cách nào đó, lõi mặc định mà tôi đang truy cập là một lõi được chỉ định trong tệp sorl.xml trong thuộc tính defaultCoreName. Bất kỳ ý tưởng? –

0

tôi vẫn chưa thử, nhưng bạn có thể thử sử dụng mới này Jobeet tutorial trong Symfony2 giải thích cách xây dựng hệ thống và cách sử dụng Solr trong đó.
Tôi hy vọng sự trợ giúp này.

0

Bạn nhận được thông số GET qua

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

Nhưng đối với điều này, bạn vẫn cần biến $ request. Bạn có thể sử dụng nó như tham số và thay đổi phương thức chữ ký của bạn này:

public function anagraficaAction (Request $ request)

Bằng cách này, bạn có thể gọi request parameter $ trong phương pháp của bạn.

Cách khác là nhận yêu cầu của bộ điều khiển hiện tại bên trong phương thức của bạn.

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

Sử dụng này, bạn có thể thay đổi setParameter của bạn như thế này:

setParameter ('nome', $ searchName)

Các vấn đề liên quan