使用java从ApacheSolr获取json对象以实现自动完成

使用java从ApacheSolr获取json对象以实现自动完成,java,mysql,json,apache,solr,Java,Mysql,Json,Apache,Solr,我做了ApacheSolr索引mysql数据,通过选择和建议进行搜索,如何在键入字符的同时从ApacheSolr动态获取json对象,这里给出了ApacheSolr URL及其相应的结果 统一资源定位地址 输出 是否可以从JQuery调用ApacheSolrURL进行自动完成,或者我是否应该编写RESTful客户端来获取JSON数据,请帮助我。是的,如果您的JavaScript也在localhost:8983中运行。否则,调用将违反浏览器的跨域策略 如果不是,您需要在与您的网站相同的域上创建一个

我做了ApacheSolr索引mysql数据,通过选择和建议进行搜索,如何在键入字符的同时从ApacheSolr动态获取json对象,这里给出了ApacheSolr URL及其相应的结果

统一资源定位地址 输出
是否可以从JQuery调用ApacheSolrURL进行自动完成,或者我是否应该编写RESTful客户端来获取JSON数据,请帮助我。

是的,如果您的JavaScript也在localhost:8983中运行。否则,调用将违反浏览器的跨域策略

如果不是,您需要在与您的网站相同的域上创建一个简单的后端bouncer。因此,如果您的SOLR运行在localhost:8983,而您的网站运行在localhost:80,那么您需要JavaScript的后端帮助程序

所讨论的JS非常简单,您可以使用$.get或$.getJSON。为此,我建议使用getJSON,请参阅中的文档和示例

我不知道您的后端是如何构建的,但是一个c mvc ajax控制器执行的反弹操作看起来是这样的。请注意,我只是在没有测试的情况下编写了它,这不会直接适用于您,但您可以将其用作指导原则

    public JsonResult Search(string searchTerm)
    {
        // if your searchterm is the value for "q". You might have to encode it.
        var url = "localhost:8983/solr/collection1/select?q=" + searchTerm + "&wt=json&indent=true";

        DoxLog.Info("Contacting Sovelia API url: " + url);
        var request = (HttpWebRequest)WebRequest.Create(url);
        request.UserAgent = "Dox";

        // Fire request
        using (var response = request.GetResponse())
        {
            var dataStream = response.GetResponseStream();
            using (var reader = new StreamReader(dataStream))
            {
                var responseAsString = reader.ReadToEnd();

                return Json(responseAsString, JsonRequestBehavior.AllowGet);
            }
        }
    }

要在SOLR中实现自动完成,必须使用SOLR的Terms组件。这是在SOLR中实现自动完成特性的最有效的方法

为了从Java代码中获取JSON响应,我将使用以下代码:

String callbackResponse = "";
ObjectMapper mapper = new ObjectMapper();

SearchResponse searchResponse = new SearchResponse();
searchResponse = <response from SOLR >
callbackResponse = mapper.writeValueAsString(searchResponse);

return callbackResponse;
这两件事对我来说都很好

希望这能帮助您解决您的问题

    public JsonResult Search(string searchTerm)
    {
        // if your searchterm is the value for "q". You might have to encode it.
        var url = "localhost:8983/solr/collection1/select?q=" + searchTerm + "&wt=json&indent=true";

        DoxLog.Info("Contacting Sovelia API url: " + url);
        var request = (HttpWebRequest)WebRequest.Create(url);
        request.UserAgent = "Dox";

        // Fire request
        using (var response = request.GetResponse())
        {
            var dataStream = response.GetResponseStream();
            using (var reader = new StreamReader(dataStream))
            {
                var responseAsString = reader.ReadToEnd();

                return Json(responseAsString, JsonRequestBehavior.AllowGet);
            }
        }
    }
String callbackResponse = "";
ObjectMapper mapper = new ObjectMapper();

SearchResponse searchResponse = new SearchResponse();
searchResponse = <response from SOLR >
callbackResponse = mapper.writeValueAsString(searchResponse);

return callbackResponse;