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查询索引库的更多相关文章

  1. solrj管理索引库

    solrj管理索引库 1.1. 什么是solrJ solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务, ...

  2. JAVAEE——Solr:安装及配置、后台管理索引库、 使用SolrJ管理索引库、仿京东的电商搜索案例实现

    1 学习回顾 1. Lucene  是Apache开源的全文检索的工具包 创建索引 查询索引 2. 遇到问题? 文件名 及文件内容  顺序扫描法  全文检索 3. 什么是全文检索? 这种先创建索引 再 ...

  3. lucene查询索引库、分页、过滤、排序、高亮

    2.查询索引库 插入测试数据 xx.xx. index. ArticleIndex @Test public void testCreateIndexBatch() throws Exception{ ...

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

    http://blog.csdn.net/yerenyuan_pku/article/details/72892280 我们使用solrj来操作索引库,一般习惯先建一个单元测试类测试下增删改查方法是否 ...

  5. Solr学习笔记(3) —— SolrJ管理索引库&集群

    一.什么是SolrJ solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图: 二.SolrJ的基本 ...

  6. Solr5.3.1 SolrJ查询索引结果

    通过SolrJ获取Solr检索结果 1.通过SolrParams的方式提交查询参数 SolrClient solr = new HttpSolrClient("http://localhos ...

  7. Windows系统环境下Solr之Java实战(三)使用solrJ管理索引库

    https://www.cnblogs.com/zhuxiaojie/p/5764680.html https://www.cnblogs.com/xieyupeng/p/9317158.html

  8. (转)淘淘商城系列——商品搜索功能Dao实现

    http://blog.csdn.net/yerenyuan_pku/article/details/72909286 终于进入商品搜索功能的开发中了,本文我来教大家编写实现商品搜索功能的Dao层代码 ...

  9. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第八天】(solr服务器搭建、搜索功能实现)

    https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...

随机推荐

  1. Android学习笔记之Spinner下拉列表使用案例

    (1)两种方法提冲Spinner中的数据源:通过list集合,或者是通过xml文件进行配置 (2)布局代码例如以下: <RelativeLayout xmlns:android="ht ...

  2. 2015 Multi-University Training Contest 9-1007 Travelling Salesman Problem

    Problem Description Teacher Mai is in a maze with n rows and m columns. There is a non-negative numb ...

  3. Java中的Nested Classes和Inner Classes

    Java中的Nested Classes和Inner Classes Java有嵌套类(Nested Classes)和内部类(Inner Classes)的概念. 嵌套类(Nested Classe ...

  4. redux 调试工具

    首先安装谷歌插件: redux-devtools 然后项目中安装插件:redux-devtools-extension 最后在创建 store 的时候进行配置: import { composeWit ...

  5. Python开发【第*篇】【Socket网络编程】

    1.Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. so ...

  6. ios33--线程通信

    // // ViewController.m // 06-掌握-线程间通信 // // atomic:为set方法加锁,线程安全,需要消耗资源. // nonatomic:不为set方法加锁,非线程安 ...

  7. hihocoder1699

    链接:http://hihocoder.com/problemset/problem/1699 快毕业了的菜菜,做了个比赛,遇到四维偏序,调成了傻逼,所以记录下,看了下以前的傻逼代码,发现自己的cdq ...

  8. 4.8 Using Ambiguous Grammars

    4.8 Using Ambiguous Grammars It is a fact that every ambiguous grammar fails to be LR and thus is no ...

  9. oracle中WMSYS.WM_CONCAT函数的版本差异

    昨天在测试的时候发现,开发人员写的一段程序放在开发库中是好的,但是放在测试库中就会有问题.开发人员一直找不到问题的原因在哪里.于是就花了点时间协助开发人员来找问题的根本原因. 通过一些技术手段,定位到 ...

  10. bzoj 1690: [Usaco2007 Dec]奶牛的旅行【01分数规划+spfa】

    把add传参里的double写成int我也是石乐志-- 首先这个东西长得就很01分数规划 然后我不会证为什么没有8字环,我们假装他没有 那么设len为环长 \[ ans \leq \frac{\sum ...