Solr的配置和在java中的使用

Solr是一个全局站内搜索引擎,可以快速的搜索出结果。

Solr依赖于tomcat,把Solr的war包放到tomcat中即可运行。

  • 使用solr,需要在solr的schema.xml中配置solr与java的映射关系,便于存放数据,在schema.xml中配置如下关系。












Solr与Spring的集成

  • 添加支持solr客户端的依赖



    org.apache.solr
    solr-solrj
    4.10.3

  • 在Spring中配置Solr的bean



  • 向solr中添加数据,先从数据库中查询出所有有用信息,然后放到solr中

    //导入solrServer对象
    @Autowired
    private SolrServer solrServer;

    //查询商品列表
    List list = itemMapper.getItemList();
    //向索引库中添加文档
    for (SolrItem solrItem : list) {
    //创建文档对象
    SolrInputDocument document = new SolrInputDocument();
    document.setField("id", solrItem.getId());
    document.setField("item_title", solrItem.getTitle());
    document.setField("item_sell_point", solrItem.getSell_point());
    document.setField("item_price", solrItem.getPrice());
    document.setField("item_image", solrItem.getImage());
    document.setField("item_category_name", solrItem.getItem_cat_name());
    document.setField("item_desc", solrItem.getItem_desc());
    //向索引库中添加文档
    solrServer.add(document);
    }
    //提交修改
    solrServer.commit();

这样,数据就全部添加到Solr中了。

  • 从Solr中查询数据

    @Autowired
    private SolrServer solrServer;//导入solrServer对象

    //创建查询对象
    SolrQuery solrQuery = new SolrQuery();
    //设置查询条件
    //solrQuery.set("q","");
    solrQuery.setQuery(queryString);
    //设置分页
    solrQuery.setStart((int) ((page - 1) * pageSize));
    solrQuery.setRows(pageSize.intValue());
    //高亮设置
    solrQuery.setHighlight(true);
    //设置高亮显示的域
    solrQuery.addHighlightField("item_title");
    //高亮显示的前缀
    solrQuery.setHighlightSimplePre("");
    //高亮显示的后缀
    solrQuery.setHighlightSimplePost("
    ");
    //设置默认搜区域
    solrQuery.set("df", "item_keywords");

    //根据查询条件查询索引库
    QueryResponse response = solrServer.query(solrQuery);
    //从response中取查询结果
    SolrDocumentList list = response.getResults();
    //查询结果list
    List itemList = new ArrayList<>();
    //遍历查询结果
    for (SolrDocument solrDocument : list) {
    //创建一商品对象
    SolrItem item = new SolrItem();
    item.setId(Long.parseLong((String)solrDocument.get("id")));
    //取高亮显示
    Map<String, Map<String, List>> highlighting = response.getHighlighting();
    List hList = highlighting.get(solrDocument.get("id")).get("item_title");
    String title = "";
    //判断是否有高亮信息
    if (hList != null && hList.size() > 0) {
    title = hList.get(0);
    } else {
    title = (String) solrDocument.get("item_title");
    }
    item.setTitle(title);
    item.setSell_point((String) solrDocument.get("item_sell_point"));
    item.setPrice((long) solrDocument.get("item_price"));
    item.setImage((String) solrDocument.get("item_image"));
    //添加到商品列表
    itemList.add(item);
    }

最后,将查询的结果放入到itemList中返回。


  • 报错信息:在solr中提示没有item_title字段,后发现是在第一步中配置的映射关系没有生效,仔细检查发现是在创建classes文件夹的时候写成了calsses导致配置没有生效。。重新配置生效即可添加数据并调用接口。
posted @ 2017-11-14 17:35  esileme  阅读(3020)  评论(0)    收藏  举报