autocomplete + elasticsearch + symfony2

时间:2013-03-27 16:49:10

标签: symfony elasticsearch

我正在使用symfony 2.2 + FoqElasticaBundle

我尝试使用结果查询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";

我希望自动填充的来源是我的查询弹性搜索

的结果

1 个答案:

答案 0 :(得分:2)

使用typeahead,您可以使用来自服务器的数据,如:

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();
});

正如您所看到的,预先输入源函数需要2个参数。

  • query是输入框中的文本类型。你需要将它传递给服务器
  • 进程就是回调。

服务器应以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));

}