Ejemplo n.º 1
0
  @RequestMapping("/search/{categoryId}")
  public String list(@PathVariable String categoryId, ModelMap model)
      throws SolrServerException, ParseException {
    SolrQuery query = new SolrQuery();

    query.setQuery("categoryId:" + categoryId);
    query.setRows(20);
    SolrDocumentList docs = solrServer.query(query).getResults();
    List<Article> articles = new ArrayList<Article>();
    for (SolrDocument solrDocument : docs) {
      Article article = new Article();
      article.setTitle(String.valueOf(solrDocument.getFieldValue("title")));
      article.setContent(String.valueOf(solrDocument.getFieldValue("content")));

      /** solr时间格式转换的坑,具体可参考 http://chengqianl.iteye.com/blog/1340385 */
      article.setCreateDate(
          new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
              .parse(String.valueOf(solrDocument.getFieldValue("createDate"))));
      articles.add(article);
    }

    model.addAttribute("articles", articles);

    return "/client/article/list";
  }
Ejemplo n.º 2
0
  @RequestMapping("/search")
  public String search(ModelMap model) throws SolrServerException {
    SolrQuery query = new SolrQuery();

    /** 设置多条filterQuery语句有助于提高内存效率;组合查询条件设置单条filterQuery语句损耗内存多,但可以优化性能 可以采用 AND 或 OR 关键字 来设置查询与或 */
    query.setQuery("title:北京  OR content:北京");

    query.setRows(20);

    // 设置高亮
    query.setHighlight(true); // 开启高亮组件
    query.addHighlightField("title"); // 高亮字段
    query.addHighlightField("content"); // 高亮字段
    query.setHighlightSimplePre("<font color='red'>"); // 标记,高亮关键字前缀
    query.setHighlightSimplePost("</font>"); // 后缀
    query
        .setHighlight(true)
        .setHighlightSnippets(
            1); // 获取高亮分片数,一般搜索词可能分布在文章中的不同位置,其所在一定长度的语句即为一个片段,默认为1,但根据业务需要有时候需要多取出几个分片。 -
                // 此处设置决定下文中titleList, contentList中元素的个数
    query.setHighlightFragsize(150); // 每个分片的最大长度,默认为100。适当设置此值,如果太小,高亮的标题可能会显不全;设置太大,摘要可能会太长。

    QueryResponse response = solrServer.query(query);
    SolrDocumentList docs = response.getResults();

    // 获取所有高亮的字段
    Map<String, Map<String, List<String>>> highlightMap = response.getHighlighting();

    List<Article> articles = new ArrayList<Article>();
    for (SolrDocument solrDocument : docs) {
      Article article = new Article();

      List<String> titleList = highlightMap.get(solrDocument.getFieldValue("id")).get("title");
      List<String> contentList = highlightMap.get(solrDocument.getFieldValue("id")).get("content");

      // 获取并设置高亮的字段title
      if (titleList != null && titleList.size() > 0) {
        article.setTitle(titleList.get(0));
      }

      // 获取并设置高亮的字段content
      if (contentList != null && contentList.size() > 0) {
        article.setContent(contentList.get(0));
      }

      articles.add(article);
    }

    model.addAttribute("articles", articles);

    return "/client/article/list";
  }