spring整合solr如何实现?详解

KLQ 2020-07-27 15:09:56 java常见问答 7525

很多人表示不知道spring整合solr应该怎样去实现,那么假如你对这个方面也有疑惑的话,就请一起来通过下面的文章来了解一下吧。

maven里添加依赖

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>4.10.2</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

spring配置文件里添加

<bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
    <constructor-arg index="0" value="http://192.168.25.128:8080/solr/collection1" />
</bean>

添加文章

Contoller或service里添加

 @Autowired
 private SolrServer solrServer;
 public int addArticle(Article article)
 {
     int result = articleMapper.addArticle(article);
     SolrInputDocument inputDocument = new SolrInputDocument();
     //向文档中添加域以及对应的值,注意:所有的域必须在schema.xml中定义过,前面已经给出过我定义的域。
     UUID uuid = UUID.randomUUID();
     inputDocument.addField("id", uuid);
     inputDocument.addField("article_title", article.getTitle());
     inputDocument.addField("article_content", article.getContent());
     inputDocument.addField("article_id", article.getAid());
     try
     {
         solrServer.add(inputDocument);
         solrServer.commit();
     }
     catch (SolrServerException e)
     {
         e.printStackTrace();
     }
     catch (IOException e)
     {
         e.printStackTrace();
     }
     return result;
 }

检索文章

ublic List < Article > queryArticles(String keyword, SolrQueryPageInfo solrQueryPageInfo)
{
    List < Article > articleList = new ArrayList < > ();
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.set("q", keyword);
    solrQuery.set("df", "article_keywords"); //df=>default field
    solrQuery.setSort("id", SolrQuery.ORDER.asc);
    solrQuery.setStart(solrQueryPageInfo.getPageIndex() * solrQueryPageInfo.getPageSize());
    solrQuery.setRows(solrQueryPageInfo.getPageSize());
    //开启高亮显示
    solrQuery.setHighlight(true);
    solrQuery.addHighlightField("article_title");
    solrQuery.addHighlightField("article_content");
    solrQuery.setHighlightSimplePre("<em>");
    solrQuery.setHighlightSimplePost("</em>");
    QueryResponse queryResponse = null;
    try
    {
        queryResponse = solrServer.query(solrQuery);
    }
    catch (SolrServerException e)
    {
        e.printStackTrace();
    }
    SolrDocumentList solrDocumentList = queryResponse.getResults();
    int total = (int) solrDocumentList.getNumFound();
    solrQueryPageInfo.setTotal(total);
    Map < String, Map < String, List < String >>> mapMapHighlighting = queryResponse.getHighlighting();
    for (SolrDocument solrDocument: solrDocumentList)
    {
        Article article = new Article();
        String id = (String) solrDocument.get("id");
        String article_title = (String) solrDocument.get("article_title");
        String article_content = (String) solrDocument.get("article_content");
        Long article_id = (Long) solrDocument.get("article_id");
        article.setTitle(article_title);
        article.setContent(article_content);
        article.setAid(article_id.intValue());
        Map < String, List < String >> map = mapMapHighlighting.get(id); //一个商品,一个json对象
        for (Map.Entry < String, List < String >> entry: map.entrySet())
        {
            if (entry.getKey()
                .equals("article_title"))
            {
                article.setTitle(entry.getValue()
                    .get(0));
            }
            if (entry.getKey()
                .equals("article_content"))
            {
                article.setContent(entry.getValue()
                    .get(0));
            }
        }
        articleList.add(article);
    }
    return articleList;
}

Controller里调用

@RequestMapping("query")
public void queryArticles(String keyword, Model model, SolrQueryPageInfo solrQueryPageInfo, HttpServletResponse response) throws IOException
{
    response.setContentType("text/html;charset=utf-8");
    ArticlePageInfo articlePageInfo = new ArticlePageInfo();
    List < Article > articleList = articleService.queryArticles(keyword, solrQueryPageInfo);
    articlePageInfo.setTotal(solrQueryPageInfo.getTotal());
    articlePageInfo.setArticles(articleList);
    String jsonString = JSON.toJSONString(articlePageInfo);
    response.getWriter()
        .println(jsonString);
}
ArticlePageInfo
public class ArticlePageInfo
{
    int total;
    List < Article > articles;
    public int getTotal()
    {
        return total;
    }
    public void setTotal(int total)
    {
        this.total = total;
    }
    public List < Article > getArticles()
    {
        return articles;
    }
    public void setArticles(List < Article > articles)
    {
        this.articles = articles;
    }
}
SolrQueryPageInfo
public class SolrQueryPageInfo
{
    int pageIndex;
    int pageSize;
    int total;
    public int getPageIndex()
    {
        return pageIndex;
    }
    public void setPageIndex(int pageIndex)
    {
        this.pageIndex = pageIndex;
    }
    public int getPageSize()
    {
        return pageSize;
    }
    public void setPageSize(int pageSize)
    {
        this.pageSize = pageSize;
    }
    public int getTotal()
    {
        return total;
    }
    public void setTotal(int total)
    {
        this.total = total;
    }
}

index_query.jsp

<%--
  Created by IntelliJ IDEA.
  User: ttc
  Date: 2018/7/6
  Time: 14:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
    
    <head>
        <title>$Title$</title>
        <style>
            ul{
              list-style: none;
            }
            
            em{
              color:red;
              font-style: normal;
            }
            
        </style>
        <link href="${pageContext.request.contextPath}/thirdpart/page/mricode.pagination.css" rel="stylesheet">
        <script src="${pageContext.request.contextPath}/thirdpart/page/jquery2.1.4.min.js"></script>
        <script src="${pageContext.request.contextPath}/thirdpart/page/mricode.pagination.js"></script>
        <script src="${pageContext.request.contextPath}/thirdpart/page/arttemplate.min.js"></script>
        
        <script>
            window.onload = function () {
                
                $('#btn')
                    .click(function () {
                        var page = $("#page");
                        page.pagination({
                            pageIndex: 0
                            , pageSize: 2
                            , showInfo: true
                            , showJump: true
                            , showPageSizes: true
                            , remote: {
                                url: ' ${pageContext.request.contextPath}/article/query'
                                , params: $('form')
                                    .serializeArray()
                                , success: function (data) {
                                    
                                    var html = template('test', data);
                                    document.getElementById('content')
                                        .innerHTML = html;
                                }
                            }
                        }); //json 对象
                    })
                
            }
            
        </script>
    </head>
    
    <body>
        
        
        <form action="#">
            <input type="text" name="keyword">
            <input type="button" value="搜索" id="btn">
        </form>
        
        <div id="content">
            
        </div>
        <div id="page" class="m-pagination"></div>
        
    </body>
    
    <script id="test" type="text/html">
        <ul class="artilce-list">
            
            {{each articles as article}}
            <li>
                <div><a href="${pageContext.request.contextPath}/article/view_article/{{article.aid}}">{{#article.title}}</a></div>
                <div>{{#article.content}}</div>
            </li>
            {{/each}}
        </ul>
        
    </script>
    
</html>

以上内容源于网络仅供参考。

你想成为java架构师吗?可以关注奇Q工具网来进行了解和学习相关的知识哦。

推荐阅读:

spring整合mybatis如何实现?步骤示例

SpringBoot整合JPA实例分享,要如何实现?

springboot整合shiro怎么实现?有什么优势?