如何获取Jquery Autocomplete插件以显示Solr Documents返回?

时间:2016-06-30 11:41:57

标签: jquery ajax spring-mvc java-ee solr

我正在使用spring MVC 4.X和Solr设置来索引和查询我的数据,但我是Jquery / JavaScript世界的新手。 我找到了一个代码片段,它直接从JSP页面查询Solr URL。但我认为这不是一个好主意 为了将视图与业务逻辑结合起来,我编写了一个拦截搜索查询并返回一个控制器的控制器 SolrDocuments列表。

任何人都可以告诉我需要修改哪些内容以便在UI中显示结果,我将响应作为JSON返回,或者至少我希望如此。

来自UI的请求

$(function() {
        $("#searchBox").autocomplete({
            source : function(request, response) {
                var searchField = $('#searchBox').val();
                var URL = "${home}/searchsolr?query=" + searchField;
                $.ajax({
                    url : URL,
                    success : function(data) {
                        var docs = JSON.stringify(data.response.docs);

                        var jsonData = JSON.parse(docs);
                        response($.map(jsonData, function(value, key) {
                            return {
                                label : value.name
                            }
                        }));
                    },
                    dataType : 'jsonp',
                    jsonp : 'json.wrf'
                });
            },
            minLength : 1
        })
    });

SearchController相关代码段

@RequestMapping(value = "/searchsolr")
    public  @ResponseBody SolrDocumentList getSearchResultFromSolr(ModelMap model ,@RequestParam("query") String  queryText) {
        System.out.println("INSIDE SOLR SEARCH");
        ProdLookupService  bls = new ProdLookupService();
        System.out.println("query text is "+queryText);
        SolrDocumentList sdl =bls.findList(queryText);
        System.out.println("goin to return");
        return sdl;
    }

1 个答案:

答案 0 :(得分:0)

最好使用对Solr的常规REST调用来获取数据而不是Java API。首先,基于JQuery和Controller的方法很好。所以保持这样的流程。使用JQuery来调用您的Controller,就像您现在正在做的那样。然后,在控制器中进行HTTP GET调用以从Solr中获取数据,不要使用Solr API。在发送查询时,所有其他参数也会将wt = json作为参数传递。这样,您将从Solr收到一个JSON。在编码的String中传递所有参数。收到数据后,您可以轻松地将数据作为JSON字符串发送回JQuery Ajax。然后,您可以根据需要在JQuery中解析此响应。