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控制台将打印如下图所示的结果。 

最新文章

  1. PHP 装饰器模式
  2. 理解 Keystone 核心概念 - 每天5分钟玩转 OpenStack(18)
  3. xampp 访问出现New XAMPP security concept 解决办法
  4. mysql启动不成功显示The server quit without updating PID file的解决方法
  5. WatchKit App Submission Issues
  6. iOS 真机测试的一些报错
  7. ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引
  8. Eclipse开发android安装环境
  9. [置顶] android开发之来电自动拒接并自动回复短信_上课模式app
  10. [置顶] 使用sping AOP 操作日志管理
  11. vba读文本如果文本文件太大会提示错误!
  12. ucli tcl cmd
  13. Java NIO系列教程(三) Buffer
  14. urllib2特点--urllib2.build_opener对象接口
  15. 针对C程序员的 C++
  16. [转]android ANR产生原因和解决办法
  17. Log 日志工具类 保存到文件 MD
  18. SpringCloud入门系列(一)
  19. 【Java】仿真qq尝试:聊天界面 &amp;&amp; 响应用户输入
  20. POJ3322 Bloxorz I 无脑广搜(我死了。。。)

热门文章

  1. 第6章1节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览
  2. 华为OJ1964-求解立方根(牛顿迭代法)
  3. div拖拽缩放jquery插件编写——带8个控制点
  4. 安装eclipse中html/jsp/xml editor插件以及改动html页面的字体
  5. linux服务器上的mysql允许远程连接
  6. Python正則表達式小结(1)
  7. Unity 5.x 导入教学Demo
  8. clojure一些笔记
  9. 【HDU 3652】 B-numbers
  10. Flask的jinja2模板中自定义过滤器的使用