2013-03-27 89 views
0

我在symfony的2.2 + FoqElasticaBundle自動完成+ elasticsearch + Symfony2的

我嘗試使用自動完成從結果查詢elasticsearch

<input type="text" class="span3" id="search" data-provide="typeahead" data-items="4" /> 

var subjects = ['PHP', 'MySQL', 'SQL', 'PostgreSQL', 'HTML', 'CSS', 'HTML5', 'CSS3', 'JSON']; 
$('#search').typeahead({source: subjects}) 

自動完成的工作原理是這樣的,但是...

如何讓我的elasticsearc網址取代像這樣的主題?

var subjects = "http://myhost:9200/_search?pretty=true"; 

32,我想自動完成的來源是我查詢的結果elasticsearch

回答

2

隨着預輸入您可以使用來自服務器的數據等:

function search() { 
    $('#search').typeahead({ 
     source: function (query, process) { 
      return $.get("{{path("url_to_fetch_from_server", {_format: "json"})}}", { "query" : query }, function (data) { 
       return process(data); 
      }); 
     } 
    }); 
}; 

$(function(){ 
    search(); 
}); 

正如你所看到的typeahead源函數需要2個參數。

  • 查詢是鍵入框中的文本類型。您需要將此傳遞給服務器
  • 過程是回調。

服務器應該以JSON格式迴應。您可以將「{{path(」url_to_fetch_from_server「,{_format:」json「})}}」替換爲您的真實網址。

public function queryAction(){ 
    $query = $this->getRequest()->query->get("query"); 
    $gType = $this->container->get('foq_elastica.finder.search_db'); 


    $results = $gType->find($query, 20); 

    $tools = []; 
    foreach($results as $result){ 
     $tools[] = $result->getTool(); 
    } 

    return new Response(json_encode($tools)); 

} 
+0

嗨,謝謝你的回答,但我不明白過程回調。 getTool的方法是什麼?我將其替換爲我的方法誰呼叫我的標題。在callbakc過程中,我沒有我的結果,只有相同的結果:第一10。似乎我的控制器queryAction不執行 – ibasaw 2013-04-11 10:51:05

+0

我終於明白了!非常感謝你 !! – ibasaw 2013-04-12 07:31:46

+0

@channa你可以請添加路線? – 2016-03-18 11:30:32

相關問題