在Solr(URL)超链接中创建一个字段

时间:2016-10-14 09:12:20

标签: java servlets solr solrj

我的意思是,当用户搜索特定内容时,例如Supreme,

它将打印出1994年4月在纽约市成立的 supremenewyork.com ,Supreme,一个滑板店/服装品牌[1] [2]。

如何将文字 supremenewyork.com 变为网址。基本上我从servlet获取参数并打印在JSP结果页面上。根据我的知识,它不能在Solr方面完成。

Solr的任何专家都能给我一个解决方案吗?

以下是我的以下代码。

        System.out.println("request parameter: "
                + request.getParameter("search"));
        PrintWriter out = response.getWriter();
        try {
            HttpSolrServer solr = new HttpSolrServer("http://localhost:8983/solr/Corename/");
            SolrQuery query = new SolrQuery();
            String test;

            // Getting the parameter from the textbox name search
            query.setQuery(request.getParameter("search"));


            query.setFields("id", "content");
            query.setStart(0);

            QueryResponse response1 = solr.query(query);
            SolrDocumentList results = response1.getResults();
            for (int i = 0; i < results.size(); ++i) {

                test = results.toString();
                String testresults = test.replace("numFound=2,start=0,docs=[","");
                testresults = testresults.replace("numFound=1,start=0,docs=[","");
                testresults = testresults.replace("numFound=4,start=0,docs=[","");
                testresults = testresults.replace("SolrDocument{", "");
                testresults = testresults.replace("content=[", "");
                testresults = testresults.replace("id=", "");
                testresults = testresults.replace("]}]}", "");
                testresults = testresults.replace("]}", "");



                request.setAttribute("testresults", testresults);
                System.out.println(testresults);
                request.getRequestDispatcher("Results.jsp").forward(request,
                        response);

            }
        } catch (SolrServerException se) {
            se.printStackTrace();

        }

    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }
}

JSP代码:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>THE SUPER SEARCH</title>
</head>
<body>
<h4>Here's the following results</h4>
<%String testresults=(String)request.getAttribute("testresults");
out.print("" + testresults);
%>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

我不鼓励直接在Solr做这件事,恕我直言,这就像要求MySql存储一个字符串并返回一个url。

无论如何,如果你真的想用Solr做这件事,有很多方法:

  1. 使用Solr DocTransformers

  2. 格式化一个或多个字段的输出,我建议使用XSLTResponseWriter,它也可以返回json。

  3. 将您自己的SearchComponent添加到您的Solr实例中,此处为interesting posthere

  4. 我知道的另一种方式是Alba,Solr插件很容易。

  5. 最后,如果你真的想要返回一个ulr,你可以在索引期间将url存储在一个字段中。

    <强>更新

    查看您发布的代码,我看到的最大问题是您使用迭代返回结果集的方式。你应该这样做:

    for (SolrDocument d : response1.getResults()) {
        String content = (String) d.get("content");
        long id = (long) d.get("id");
    }
    

    内部SolrdocumentLinkedHashMap