0

我在 symfony 2.2 + FoqElasticaBundle

我尝试从结果查询弹性搜索中使用自动完成

<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 url 替换这样的主题?

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

我希望我的自动完成的来源是我的查询弹性搜索的结果

4

1 回答 1

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

如您所见,typeahead 源函数采用 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));

}
于 2013-04-09T09:06:45.953 回答