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