0

私は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})

オートコンプリートはこのように機能しますが...

Elasticsearch の URL を取得して件名を次のように置き換えるにはどうすればよいですか?

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

オートコンプリートのソースがクエリelasticsearchの結果であることを望みます

4

1 に答える 1

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

ご覧のとおり、先行入力ソース関数は 2 つの引数を取ります。

  • query は、先行入力ボックスのテキスト タイプです。これをサーバーに渡す必要があります
  • プロセスはコールバックです。

サーバーは JSON 形式で応答する必要があります。"{{path("url_to_fetch_from_server", {_format: "json"})}}" を実際の URL に置き換えることができます。

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 に答える