搭建solr服务器:http://www.cnblogs.com/liyafei/p/8005571.html

一导入要搜索的字段

1:确定发布搜索的字段,sql语句

SELECT

a.id,

b. title

FROM

tb_item a

LEFT JOIN tb_item_cat b ON a.cid = b.id

2:创建pojo接收相应的字段

public class Item {
private Long id;
private String title;
setter and getter
}

3:创建Mapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.taotao.search.mapper.ItemMapper" >
<select id="getItemList" resultType="com.taotao.search.pojo.Item">
SELECT
a.id,
b.title
FROM
tb_item a
LEFT JOIN tb_item_cat b ON a.cid = b.id
</select>
</mapper>

4:创建mapper接口

public interface ItemMapper{
public List<Item> getItemList();
}

5:配置SolrServer

<bean id="solrserver" class="org.apache.solr.client.solrj.SolrServer">
<constract-arg name="url" value="http://192.168.100.91:8080/solr"/>
</bean>

7:创建service

@Service
public class ItemServiceImpl implements ItemService { @Autowired
private ItemMapper itemMapper;
@Autowired
private SolrServer solrServer; @Override
public TaotaoResult importItemToIndex() throws Exception {
//查询商品列表
List<Item> itemList = itemMapper.getItemList();
//将商品列表导入solr
for (Item item : itemList) {
SolrInputDocument document = new SolrInputDocument();
document.addField("id", item.getId());
document.addField("title", item.getTitle());
//将文档写入索引库
solrServer.add(document);
}
//提交修改
solrServer.commit();
return TaotaoResult.ok();
} }

8:创建controller

@Controller
@RequestMapping("/manager")
public class ItemController { @Autowired
private ItemService itemService; @RequestMapping("/importall")
@ResponseBody
public TaotaoResult importAll() {
TaotaoResult result = null;
try {
result = itemService.importItemToIndex();
} catch (Exception e) {
e.printStackTrace();
return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
}
return result;
}
}

二:发布搜索服务,可以供其它客户端调用

1:返回值pojo

public class SearchResult {

    private Long recordCount;
private List<Item> itemList;
private Integer pageCount;
private Integer curPage; }

2:dao,从solr服务器中去查询,不用去数据库

@Service
public class ItemSearchDaoImpl implements ItemSearchDao { @Autowired
private SolrServer solrServer; @Override
public SearchResult searchItem(SolrQuery solrQuery) throws Exception {
//根据查询条件搜索索引库
QueryResponse response = solrServer.query(solrQuery);
//取商品列表
SolrDocumentList documentList = response.getResults();
//商品列表
List<Item> itemList = new ArrayList<>();
for (SolrDocument solrDocument : documentList) {
Item item = new Item();
item.setId((Long) solrDocument.get("id"));
//取高亮显示
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
String title = "";
if (null != list && !list.isEmpty()) {
title = list.get(0);
} else {
title = (String) solrDocument.get("title");
}
item.setTitle(title);
itemList.add(item);
}
SearchResult result = new SearchResult();
//商品列表
result.setItemList(itemList);
//总记录数据
result.setRecordCount(documentList.getNumFound()); return result;
} }

3:service层

@Service
public class ItemSearchServiceImpl implements ItemSearchService { @Value("${SEARCH_RESULT_PAGE_SIZE}")
private Integer PAGE_SIZE;
@Autowired
private ItemSearchDao itemSearchDao; @Override
public SearchResult searchItem(String queryString, Integer page) throws Exception {
//创建一个查询对象
SolrQuery solrQuery = new SolrQuery();
//查询条件
if (StringUtils.isBlank(queryString)) {
solrQuery.setQuery("*:*");
} else {
solrQuery.setQuery(queryString);
}
//分页条件
if (page == null) {
page = 1;
}
solrQuery.setStart((page -1) * PAGE_SIZE);
solrQuery.setRows(PAGE_SIZE);
//高亮显示
solrQuery.setHighlight(true);
//设置高亮显示的域
solrQuery.addHighlightField("title");
//高亮显示前缀
solrQuery.setHighlightSimplePre("<em style=\"color:red\">");
//后缀
solrQuery.setHighlightSimplePost("</em>");
//设置默认搜索域
solrQuery.set("df", "item_keywords"); //执行查询
SearchResult result = itemSearchDao.searchItem(solrQuery);
//计算分页
Long recordCount = result.getRecordCount();
int pageCount = (int) (recordCount / PAGE_SIZE);
if (recordCount % PAGE_SIZE > 0) {
pageCount++;
}
result.setPageCount(pageCount);
result.setCurPage(page); return result;
} }

4:controller

@Controller
public class ItemSearchController { @Autowired
private ItemSearchService itemSearchService; @RequestMapping("/q")
@ResponseBody
public TaotaoResult search(@RequestParam(value = "kw") String queryString,
@RequestParam(value = "page", defaultValue = "1") Integer page) { if (StringUtils.isBlank(queryString)) {
return TaotaoResult.build(400, "查询条件是必须的参数");
}
SearchResult result = null;
try {
result = itemSearchService.searchItem(queryString, page); } catch (Exception e) {
e.printStackTrace();
return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
} return TaotaoResult.ok(result);
}
}

使用SolrJ代码导入,发布搜索服务的更多相关文章

  1. geoserver 通过代码实现发布地图服务

    GeoServer:代码实现批量发布地图服务 利用GeoServer发布WCS服务,那么如果我有很多数据需要进行发布,这样利用GeoServer提供的UI界面进行操作显然很不显示.那能不能利用GeoS ...

  2. 通过纯代码方式发布WCF服务

    网络上搜索WCF服务,一般是寄宿在IIS,通过WebConfig方式配服务地址,接口类型等信息,但是对于我这样的懒人,目前项目在开发阶段,实在不愿意每次添加新服务就更新配置文件,于是使用了反射来加载服 ...

  3. arcgis 10.1 导入数据到oracle 发布地图服务

    机器配置说明 数据库服务器 系统:linux 软件:oracle 11G 64位 Arcgis server服务器 系统:win7 专业版 软件:arcgis server 10.1.win64_11 ...

  4. solr服务(搜索服务)

    1   Solr实现全文搜索 1.1   Solr是什么? Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的 ...

  5. 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索

    原文:[高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公 ...

  6. JAVAEE——BOS物流项目07:WebService入门、apache CXF入门、基于CXF发布CRM服务

    1 学习计划 1.WebService入门 n 什么是WebService n 调用网络上的WebService服务 n SOAP和WSDL概念 n 基于JDK1.7发布一个简单的WebService ...

  7. 从零搭建 ES 搜索服务(二)基础搜索

    一.前言 上篇介绍了 ES 的基本概念及环境搭建,本篇将结合实际需求介绍整个实现过程及核心代码. 二.安装 ES ik 分析器插件 2.1 ik 分析器简介 GitHub 地址:https://git ...

  8. 【高德地图API】从零開始学高德JS API(四)搜索服务——POI搜索|自己主动完毕|输入提示|行政区域|交叉路口|自有数据检索

    地图服务.大家能想到哪些?POI搜素,输入提示,地址解析,公交导航,驾车导航,步行导航,道路查询(交叉口),行政区划等等.假设说覆盖物Marker是地图的骨骼,那么服务,就是地图的气血. 有个各种各样 ...

  9. Web Service——CXF发布REST服务

    1. 什么是REST REST,英文representational state transfer(表象性状态转变)或者表述性状态转移,REST是web服务的一种架构风格,使用HTTP.URI.XML ...

随机推荐

  1. 微信小程序学习指南

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  2. 【架构师之路】APP架构师必看:面对爆发流量如何进行架构调整

    一.APP架构与WEB架构的最大不同 移动APP的架构和传统PC的WEB架构有三点不同: 1.连接的稳定性.在传统的web端连接成功后就可以认为它是稳定的,但在移动端.无线端,APP连接非常敏感,可能 ...

  3. jsp连接数据库的乱码问题 servlet请求参数编码处理get post

    1.在所有需要读取数据的地方用下面的方式.同时jsp必须统一编码,如我都是UTF-8 String userName= new String(request.getParameter("us ...

  4. CSS技巧:逐帧动画抖动解决方案

    笔者所在的前端团队主要从事移动端的H5页面开发,而团队使用的适配方案是: viewport units + rem.具体可以参见凹凸实验室的文章 – 利用视口单位实现适配布局 . 笔者目前(2017. ...

  5. CopyTo 方法详解

    如果你就想复制一个字符串到另一个字符串,可以使用string的静态方法Copy 例如: string a = "hello"; string b = "world&quo ...

  6. OpenStack cloud 第一天

    这是刚接触openstack时候,看到的第一篇文章,感触很深,自己很喜欢的一个词Horizon就是出自本文   ============================================ ...

  7. sysbench 压力测试工具

    一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL. ...

  8. 什么是webpack?

    https://www.webpackjs.com/concepts/ https://webpack.github.io/ 本质上,webpack 是一个现代 JavaScript 应用程序的静态模 ...

  9. vue--使用定时器的问题

    https://blog.csdn.net/ywl570717586/article/details/79963162

  10. Kibana在Linux上安装部署及使用说明

    Kibana安装及使用说明 Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索.查看交互存储在Elasticsearch索引中的数据. 官方地址:https://www. ...