(转) 淘淘商城系列——使用SolrJ查询索引库
http://blog.csdn.net/yerenyuan_pku/article/details/72908538
我们有必要在工程中写查询索引库的代码前先进行必要的测试。我们先到Solr服务页面去简单进行查询,如下图所示,在搜索条件”q”这一栏,我们输入”手机”,分页参数的每页显示条数我们随便写一个数,这里我写的是3,也就是一次只查询三条数据。由于在查询条件一栏没有指定搜索域,因此默认搜索域一定要指定,否则无法查询出数据,我们在Solr服务器的schema.xml文件当中配置了复制域”item_keywords”,我们的默认搜索域便使用复制域”item_keywords”。 
我们还应知道在天猫或者京东,当搜索出结果后关键字是高亮显示的,我们也应该有高亮显示效果,我们点击”hl”前面的复选框就会展开如下图关于高亮显示的配置,让我们指定要高亮显示的字段以及高亮显示的html代码(在关键字前面和后面都有,比如<em>手机</em>),最后点击”Execute Query”按钮便可以查询到如下图右侧的数据,上面是查询出来的商品列表信息,下面是高亮信息”highlighting”。 
大家应该注意到下图高亮数据部分有一条查询结果是空的("143771131488369": {}),这是因为这条数据的item_title字段是”121”并没有关键字”手机”,但是在商品分类中有关键字”手机”,于是认为该商品也符合搜索条件(复制域的意思是把各个字段的值都复制到”item_keywords”当中,查询的时候,只要满足其中一个字段的条件便认为是满足条件),但由于”item_title”字段没有关键字”手机”,因此显示的高亮结果是"143771131488369":{}。
针对上面的查询条件,我们使用Java测试代码来跑一遍,在taotao-search-service工程的TestSolrJ单元测试类中添加如下测试方法。
@Test
public void testQueryDocument() throws Exception {
SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
// 创建一个SolrQuery对象
SolrQuery query = new SolrQuery();
query.setQuery("手机");
// 设置自己的分页条件
query.setStart(0); // 从0开始
query.setRows(3); // 每页取10条记录
// 设置默认搜索域
query.set("df", "item_keywords");
query.setHighlight(true); // 开启高亮显示
query.addHighlightField("item_title"); // 添加高亮显示的域
query.setHighlightSimplePre("<em>"); // 设置高亮显示的前缀
query.setHighlightSimplePost("</em>"); // 设置高亮显示的后缀
// 执行查询
QueryResponse response = solrServer.query(query);
// 取查询结果
SolrDocumentList solrDocumentList = response.getResults();
// 查询结果总记录数
System.out.println("查询结果总记录数:" + solrDocumentList.getNumFound());
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
String itemName = null;
// 取高亮显示
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
if (list != null && list.size() > 0) {
itemName = list.get(0); // 将高亮后的结果取出来
} else {
itemName = (String) solrDocument.get("item_title");
}
System.out.println(itemName);
System.out.println(solrDocument.get("item_sell_point"));
System.out.println(solrDocument.get("item_price"));
System.out.println(solrDocument.get("item_image"));
System.out.println(solrDocument.get("item_category_name"));
System.out.println("--------------------------------------------------------------");
}
}
运行以上方法,Eclipse控制台将打印如下图所示的结果。 
(转) 淘淘商城系列——使用SolrJ查询索引库的更多相关文章
- solrj管理索引库
solrj管理索引库 1.1. 什么是solrJ solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务, ...
- JAVAEE——Solr:安装及配置、后台管理索引库、 使用SolrJ管理索引库、仿京东的电商搜索案例实现
1 学习回顾 1. Lucene 是Apache开源的全文检索的工具包 创建索引 查询索引 2. 遇到问题? 文件名 及文件内容 顺序扫描法 全文检索 3. 什么是全文检索? 这种先创建索引 再 ...
- lucene查询索引库、分页、过滤、排序、高亮
2.查询索引库 插入测试数据 xx.xx. index. ArticleIndex @Test public void testCreateIndexBatch() throws Exception{ ...
- (转)淘淘商城系列——使用solrj来测试索引库
http://blog.csdn.net/yerenyuan_pku/article/details/72892280 我们使用solrj来操作索引库,一般习惯先建一个单元测试类测试下增删改查方法是否 ...
- Solr学习笔记(3) —— SolrJ管理索引库&集群
一.什么是SolrJ solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图: 二.SolrJ的基本 ...
- Solr5.3.1 SolrJ查询索引结果
通过SolrJ获取Solr检索结果 1.通过SolrParams的方式提交查询参数 SolrClient solr = new HttpSolrClient("http://localhos ...
- Windows系统环境下Solr之Java实战(三)使用solrJ管理索引库
https://www.cnblogs.com/zhuxiaojie/p/5764680.html https://www.cnblogs.com/xieyupeng/p/9317158.html
- (转)淘淘商城系列——商品搜索功能Dao实现
http://blog.csdn.net/yerenyuan_pku/article/details/72909286 终于进入商品搜索功能的开发中了,本文我来教大家编写实现商品搜索功能的Dao层代码 ...
- 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第八天】(solr服务器搭建、搜索功能实现)
https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...
随机推荐
- php & 和 &amp; (主要是url 问题)
ini_set('arg_separator.output','&'); 也能够在php.ini 改动
- Node.js创建自签名的HTTPS服务器
https://cnodejs.org/topic/54745ac22804a0997d38b32d 用Node.js创建自签名的HTTPS服务器 发布于 4 年前 作者 eeandrew 6 ...
- 脱离开发软件启动Tomcat访问项目
作为开发人员平时用的最多的就是通过开发软件启动Tomcat服务,从而访问项目.这样便于开发的bug调试 此处讲的是脱离开发软件启动Tomcat访问项目 链接参考: http://jingyan.bai ...
- BZOJ_3133_[Baltic2013]ballmachine_堆+倍增
BZOJ_3133_[Baltic2013]ballmachine_堆+倍增 Description 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树 ...
- ubuntu 16.04 Eclipse 图标显示为 ?(已解决)
这个问题挺好解决: sudo gedit /usr/share/applications/eclipse.desktop在这个文件中将Icon=/home/soyo/eclipse/icon.xpm, ...
- 解决 2003 Can’t connect to MySQL server on ‘localhost’ (10048)
2003 Can’t connect to MySQL server on ‘localhost’ (10048)一般见于使用mysql的windows 2003服务器.错误的出现的原因: 第一种原因 ...
- 关于Java泛型的?和 T 的区别
java中的?号指未知的类型:而T指具体类型 泛型问号(?)未知的类型就是可以指定当前问号(?)所代表的类,可以指定上限(extends)和下限(super) 泛型T指已经具体知道了类型,就是不能指定 ...
- oracle创建默认表空间---重要
当oracle创建数据库后,sys创建用户时还要有默认表空间.不创建默认表空间在导如项目时会有些数据表导入不成功! 由于时间仓促以截屏为例 之后会在刚刚那个空文件生成一个文件 ----------- ...
- oracle给用户授权
1.在PLSQL里,用sys(oracle系统用户)登陆,登陆的时候一定要选择SYSDBA.普通用户登陆选择normal就可以了 2.创建用户 *也可以给普通用户授权为dba即数据库管理员.在导入导出 ...
- bzoj 1628: [Usaco2007 Demo]City skyline【贪心+单调栈】
还以为是dp呢 首先默认答案是n 对于一个影子,如果前边的影子比它高则可以归进前面的影子,高处的一段单算: 和他一样高的话就不用单算了,ans--: 否则入栈 #include<iostream ...