Solr--Solr与Spring整合(非完整版)

20 篇文章 0 订阅
9 篇文章 0 订阅

Solr与Spring整合

    1.Pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.shouhe.demo</groupId>
    <artifactId>demospringsolr</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <spring.version>4.1.6.RELEASE</spring.version>
        <solrj.version>4.10.3</solrj.version>
        <mysql.driver.version>5.1.38</mysql.driver.version>
        <commons-logging.version>1.2</commons-logging.version>
        <mybatis.version>3.5.4</mybatis.version>
        <mybatis-spring.version>2.0.3</mybatis-spring.version>
        <servlet-api.version>3.1.0</servlet-api.version>
        <jsp-api.version>2.2</jsp-api.version>
        <jstl.version>1.2</jstl.version>
        <tomcat-plugin.version>2.2</tomcat-plugin.version>
        <mybatis-generator.version>1.3.5</mybatis-generator.version>
    </properties>

    <dependencies>
        <!--最好能与solr的版本一致-->
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>${solrj.version}</version>
        </dependency>
        <!--solrj 依赖的jar包-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>${commons-logging.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!--MySQL Driver Dependency-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.driver.version}</version>
        </dependency>
        <!--MyBatis Dependency-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!--MyBatis Integration Spring Dependency-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis-spring.version}</version>
        </dependency>
        <!--Web Dependency-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
            <version>${servlet-api.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <scope>provided</scope>
            <version>${jsp-api.version}</version>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <!--Tomcat Plugin-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>${tomcat-plugin.version}</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>${mybatis-generator.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.38</version>
                    </dependency>
                </dependencies>
                <!--指定配置文件的路径-->
                <configuration>
                    <configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <!-- src/main/java下 任何目录下以.xml结尾的文件-->
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>
    2.查询数据 Controller
/**
 * @author 守鹤
 * @date 2020/5/8 22:43
 */
@Controller
@RequestMapping("/search")
public class SeachController {

    @Autowired
    private SeachService seachService;

    @RequestMapping("/tbItem")
    public String searchTbItem(String query, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10")Integer rows, Model model){
        try {
        	//得到查询结果
            PageResult<TbItem> result = seachService.searchTbItem("阿尔卡特", page, rows);
            model.addAttribute("solrItem",result);
        } catch (SolrServerException e) {
            e.printStackTrace();
            return "error";
        }
        return "item";
    }
}
    3.查询数据 Service
/**
 * @author 守鹤
 * @date 2020/5/8 22:46
 */
@Service
public class SeachServiceImpl implements SeachService {

    @Autowired
    private SolrTbItemDao solrTbItemDao;

    public PageResult<TbItem> searchTbItem(String query, Integer page, Integer rows) throws SolrServerException {
        SolrQuery solrQuery = new SolrQuery();
        //设置查询关键字
            solrQuery.setQuery(query);
        //设置默认查询域
            solrQuery.set("df","eg_key_words");
        //设置开始条数
            solrQuery.setStart((page-1)*rows);
        //设置结束条数
            solrQuery.setRows(rows);

        //设置开启高亮
            solrQuery.setHighlight(true);
        //添加高亮域
            solrQuery.addHighlightField("eg_title");
        //设置高亮前缀
            solrQuery.setHighlightSimplePre("<em style='color:red'>");
        //设置高亮后缀
            solrQuery.setHighlightSimplePost("</em>");
            
        return solrTbItemDao.searchTbItemToSolr(solrQuery);
    }
}

    4.查询数据 Dao
/**
 * @author 守鹤
 * @date 2020/5/8 22:48
 */
@Repository
public class SolrTbItemDaoImpl implements SolrTbItemDao {

    @Autowired
    private SolrServer solrServer;

    public PageResult<TbItem> searchTbItemToSolr(SolrQuery solrQuery) throws SolrServerException {
        PageResult<TbItem> tbItemPageResult = new PageResult<TbItem>();
        QueryResponse resp = solrServer.query(solrQuery);
        //得到全部的结果集
          SolrDocumentList results = resp.getResults();
        /**
          取出高亮结果
            key: id的值 就是document.get("id")的结果
            value: map,这个map的key为高亮显示的字段,value是高亮的数据
        */
            Map<String, Map<String, List<String>>> highlighting = resp.getHighlighting();
        //设置查询到的总条数
            tbItemPageResult.setTotalSize(results.getNumFound());
        
        List<TbItem> list = new ArrayList<TbItem>();
        for (SolrDocument document:results){
            TbItem item = new TbItem();
            //solr schema.xml 文件中 属性为 store=true 的值都可以获取到
            	item.setId(Long.parseLong((String) document.get("id")) );
            	item.setSellPoint((String) document.get("eg_sell_point"));
            	item.setPrice(Long.parseLong(document.get("eg_price").toString()));
            	item.setImage((String)((List) document.get("eg_image")).get(0));
            //获取高亮数据,map一定是存在的,所以不需要为空的判断
            	List<String> hls = highlighting.get(document.get("id")).get("eg_title");
            //判断是否存在高亮数据,因为是从两个域中查数据,所以可能高亮数据在eg_sell_point中,所以hls可能为null
	            if(hls!=null){
	                String title = hls.get(0);
	                item.setTitle(title);
	            }else {
	                item.setTitle((String) document.get("eg_title"));
	            }
            	list.add(item);
        }
        tbItemPageResult.setList(list);
        return tbItemPageResult;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值