solrj操作solr索引库(流程)

声明:博主自己记录以免忘记,所以无逻辑无参考价值。小女子就是酱紫任性

---------首先dao层

访问索引库的类。定义一些通用的数据访问方法。

业务逻辑就是查询索引库。

参数:SolrQuery对象

业务逻辑:

1、根据Query对象进行查询。

2、返回查询结果。List<SearchItem>、查询结果的总记录数。

需要把返回结果封装到pojo中,至少包含两个属性:List<SearchItem>、Long recordCount

再包含一个总页数。

@Repository
public class ItemSearchDao {
    //注入一个solrserver((springmvc中已配)
    @Autowired
    private SolrServer solrServer;
    public SearchResult search(SolrQuery query) throws Exception{
        //根据query对象查询索引库
        QueryResponse response = solrServer.query(query);
        //获得商品列表
        SolrDocumentList results = response.getResults();
        List<SearchItem> itemList = new ArrayList<SearchItem>();
        //商品列表
        for (SolrDocument solrDocument : results) {
            SearchItem item = new SearchItem();
            item.setId((Long) solrDocument.get("id"));
            item.setCategory_name((String) solrDocument.get("item_category_name"));
            item.setImage((String) solrDocument.get("item_image"));
            item.setPrice((long) solrDocument.get("item_price"));
            item.setSell_point((String) solrDocument.get("item_sell_point"));
            //取高亮显示
            Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
            List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
            String itemTitle = "";
            //有高亮显示的内容时。
            if (list != null && list.size() > 0) {
                itemTitle = list.get(0);
            } else {
                itemTitle = (String) solrDocument.get("item_title");
            }
            item.setTitle(itemTitle);
            //添加到商品列表
            itemList.add(item);
        }
        SearchResult result = new SearchResult();
        result.setItemList(itemList);
        result.setRecordCount(results.getNumFound());
        return result;
    }
}

-----接着service层

参数:queryString:查询条件

Page:页码

Rows:每页显示的记录数。

业务逻辑:

1、创建一个SolrQuery对象。

2、设置查询条件

3、设置分页条件

4、需要指定默认搜索域。

5、设置高亮

6、执行查询,调用SearchDao。得到SearchResult

7、需要计算总页数。

8、返回SearchResult

返回值:SearchResult

public class SearchServiceImpl implements SearchService {
    // 注入dao
    @Autowired
    private ItemSearchDao itemSearchDao;

@Override
    public SearchResult search(String queryString, int page, int rows)
            throws Exception {
        // 1、创建一个SolrQuery对象。
        SolrQuery solrQuery = new SolrQuery();
        // 2、设置查询条件
        solrQuery.set(queryString);
        // 3、设置分页条件
        solrQuery.setStart((page-1)*rows);
        solrQuery.setRows(rows);
        // 4、需要指定默认搜索域。
        solrQuery.set("df","item_title");
        // 5、设置高亮
        solrQuery.setHighlight(true);
          //高亮的前缀后缀 还有高亮显示域
        solrQuery.addHighlightField("item_title");
        solrQuery.setHighlightSimplePre("<em style=\"color:red\">");
        solrQuery.setHighlightSimplePost("</em>");
        // 6、执行查询,调用SearchDao。得到SearchResult
        SearchResult result = itemSearchDao.search(solrQuery);
        // 7、需要计算总页数。 还要判断
        long recordCount = result.getRecordCount();
        long pageCount = recordCount / rows;
        if(recordCount % rows >0){
            pageCount++;
        }
        result.setPageCount(pageCount);
        // 8、返回SearchResult
        return result;
    }
}

(别忘了dubbo要声明暴露的接口)

------最后表现层

请求的url:/search

参数:

1、q 查询条件。

2、page 页码。默认为1

返回值:

逻辑视图,返回值。String。

业务逻辑:

1、接收参数

2、调用服务查询商品列表

3、把查询结果传递给页面。需要参数回显。

@Controller
public class SearchController {
    @Autowired
    private SearchService searchService;
    @Value("${ITEM_COUNT}")
    private Integer ITEM_COUNT;

@RequestMapping("/search")
    public String search(@RequestParam("q") String querString,
            @RequestParam(defaultValue = "1") Integer page, Model model)
            throws Exception {

querString = new String(querString.getBytes("iso8859-1"),"utf-8");
        SearchResult result = searchService
                .search(querString, page, ITEM_COUNT);
        // 传递给页面
        model.addAttribute("query", querString);
        model.addAttribute("totalPages", result.getPageCount());
        model.addAttribute("itemList", result.getItemList());
        model.addAttribute("page", page);

return "search";
    }
}

时间: 2024-10-15 05:04:18

solrj操作solr索引库(流程)的相关文章

使用solrj操作solr索引库

(solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用<五分钟solr4.5教程(搭建.运行)>中讲到的用xml文件的形式提交数据到索引库,其实没有那么麻烦,solr配套有好多的客户端用于操作索引库,下面我们来讲如何用solrj去操作solr索引库. 一.认识solrj solrj是solr的java客户端,用于访问solr索引库.它提供了添加.删除.查询.优化等功能. 二.下载 百度.google以下solrj下载,你会发现根本就没有,那么我们该到哪儿

维护solr索引库

一 2)solrcore    一个solr下可以有多个solrcore,每个solrcore就是一个独立的索引库3)solrconfig.xml    lib:配置solr的扩展包的位置,不指定路径的话就是collection1/lib目录,可以自动加载.如果没有需要手动创建    dataDir:索引文件保存的位置.如果不指定默认是Collection1/data目录.如果没有会自动生成    requestHandler:请求的url及对应的处理器的配置4)添加solrcore    1.

(转)淘淘商城系列——使用solrj来测试索引库

http://blog.csdn.net/yerenyuan_pku/article/details/72892280 我们使用solrj来操作索引库,一般习惯先建一个单元测试类测试下增删改查方法是否好使,这样可以大大减少出错概率,提升开发效率. 我们的taotao-search-service工程还没有添加对solrj的依赖,因此需要先添加对solrj的依赖,在taotao-search-service工程的pom.xml文件当中添加如下依赖(之所以不用写版本号是因为在taotao-paren

将数据库的数据导入solr索引库中

在solr与tomcat整合文章中,我用的索引库是mycore,现在就以这个为例. 首先要准备jar包:solr-dataimporthandler-4.8.1.jar.solr-dataimporthandler-extras-4.8.1.jar和mysql-connector-java-5.0.7-bin.jar这三个包到solr的tomcat的webapps\solr\WEB-INF\lib下 在这个文件夹的conf下配置两个文件,添加一个文件.先配置solrconfig.xml. 在该文

solrj 操作 solr 集群版

一.添加 @Test public void testAddDocument() throws Exception{ //创建一个集群的连接,应该使用 CloudSolrServer,//zkHost:zookeeper 的地址表 String zkHost = "192.168.25.129:2181,192.168.25.129:2182,192.168.25.129:2183"; CloudSolrServer solrServer = new CloudSolrServer(z

Solr索引库l配置文件schema.xm要点翻译

<?xml version="1.0" encoding="UTF-8" ?>   略... <!--   这是Solr的schema文件,应该命名为schema.xml,并且在solr home的conf目录下 (如,默认在./solr/conf/schema.xml).  有关如何根据需要定制化该文件,请参照:  http://wiki.apache.org/solr/SchemaXml  性能须知: 这里包含了很多实际应用不需要的可选项. 为

将Mysq数据导入solr索引库

本文的基础环境都是在centos 64bit,jdk1.7.79 将mysql 的jar 包添加到/home/hadoop/cloudsolr/solr-4.10.4/contrib/dataimporthandler/lib 下 修改对应的solrconfig.xml 文件我的core 是collection1,配置文件example/solr/collection1/conf/solrconfig.xml 在配置文件中添加了: <lib dir="/home/hadoop/clouds

solr4使用solrj操作索引库

solr配套有好多的客户端用于操作索引库,下面我们来讲如何用solrj去操作solr索引库. 一.认识solrj solrj是solr的java客户端,用于访问solr索引库.它提供了添加.删除.查询.优化等功能. 二.下载 百度.google以下solrj下载,你会发现根本就没有,那么我们该到哪儿下载呢?其实,它是集成到solr压缩包里的,解压文件后,有个目录/dist/solrj-lib,里面就存放了solrj所用到的jar,你把这些jar都添加到你的classpath就ok. 如果你是使用

Apache Solr 之 使用SolrJ操作索引库

Solrj是Solr搜索服务器的一个比较基础的客户端工具,可以非常方便地与Solr搜索服务器进行交互.最基本的功能就是管理Solr索引,包括添加.更新.删除和查询等.对于一些比较基础的应用,用Solj基本够用,而且你可以非常容易地通过使用Solrj的API实现与Solr搜索服务器进行交互,实现对Solr的基本管理功能.如果你的应用比较复杂,可以扩展Solrj来满足需要. 使用 SolrJ操作索引库: package com.hcm.solr.test; import java.io.IOExce