一、案例
电商网站的搜索
在互联网项目中做搜索都应该使用全文检索。
查询的是索引库,搜索功能跟数据库没有关系。
实现分析:
1、先创建索引库
需要把数据库中的数据导入到索引库中。
需要把数据库中每个字段的内容放到索引库中对应的域中。
在索引库中需要先定义业务域。
需要在schema.xml中定义业务域
需要配置中文分析器。
2、实现查询功能

二、定义业务域
1、schema.xml
1)field域的定义
name:域的名称
type:域的数据类型。是否分析取决于数据类型
类型都是在schema.xml中定义的。
indexed:是否索引
stored:是否存储
multiValued:是否多值
2)dynamicField:动态域
name属性是一个表达式。如果域的名称能和表达式向匹配那么这个域就可以使用。
3)uniqueKey:定义索引库中的主键。
4)copyField:复制域
source:源域
dest:目标域
作用:当向索引库中添加文档时,solr会自动的把源域中的内容复制到目标域中。例如查两个域中的公共部分 
查询优化的手段。
5)fieldType:域的类型定义
name:域类型的名称
class:类型对应的实现类
如果使用自定义分析器的话fieldType的class必须是solr.TextField
2、中文分析器的配置
配置步骤:
1)把IK的jar包添加到solr工程中。
2)把IK的配置文件扩展词典添加到solr工程的classpath下
3)在schema.xml中定义一个fieldType,class必须是solr.TextField
4)在filedType中指定使用IK作为分析器。
5)重启tomcat
3、业务域的定义
分析:
pid,name,catalog_name,price,description,Picture
三、创建索引库
方案一:(项目中一般采用)
使用java代码实现。
从数据库中读取数据,使用solrj把数据写入索引库。
方案二:
使用solr的数据导入功能。

配置方法:
1、把DataImport需要的jar包添加到solr工程中。
solr-dataimporthandler-4.10.3.jar
solr-dataimporthandler-extras-4.10.3.jar
mysql的数据库驱动
mysql-connector-java-5.1.7-bin.jar
可以把jar包放到:
solrhome\collection1\lib目录下,如果没有需要手动创建。solr启动后会自动加载。
2、需要在solrconfig.xml配置数据导入功能。
需要创建一个data-config.xml文件,其中配置数据库连接串,sql语句及结果集的映射关系。
此文件应该和solrconfig.xml在同一个目录下。
3、重启tomcat
四、查询索引库
1、使用solr的后台实现查询
q:主查询条件,完全支持lucene的查询语法的。只有一个主查询条件
fq:过滤条件,可以有多个。在查询结果基础上进行过滤。完全支持lucene的查询语法
sort:排序条件
start, rows:分页条件
start:起始的行号
rows:每页记录的行数
fl:结果中包含的域的列表。如果不设置默认返回所有的域。
df:默认搜索域
hl:开启高亮显示
hl.fl:高亮显示的域
hl.simple.pre:高亮的前缀
hl.simple.post:高亮显示的后缀

2、使用solrj查询索引库
步骤:
1)创建一个SolrServer对象
2)创建一个SolrQuery对象。
3)向SolrQuery对象中设置各种查询条件,可以参考后台。
4)执行查询
5)取查询结果
五、综合案例
1、需求
实现一个电商搜索功能。
2、功能分析
输入参数:
1)主查询条件
2)根据商品分类名称过滤
3)价格区间过滤
4)排序条件
5)分页条件
输出的结果:
1)查询结果的总记录数
2)查询结果的总页数
3)商品列表
图片
价格
标题(关键词需要高亮显示)
3、实现步骤
1、工程搭建
1)创建一个web工程
2)添加jar包
使用springmvc作为表现层框架
使用solrj的jar包

2、添加jsp
3、业务逻辑实现。只需要查询索引库即可。
4、dao层
有一些通用的查询方法。
参数:SolrQuery
返回值:ResultModel

需要一个表示商品的类
需要一个返回结果的类,其中包含商品列表、总记录数、总页数。

业务逻辑:
1)根据SolrQuery对象执行查询
2)取查询结果的总记录数
3)取商品列表,需要封装到ProductModel对象中
4)取高亮结果
5)创建一个ResultModel对象
6)返回结果
5、Service
业务逻辑:
1、接收参数
2、创建一个SolrQuery对象
3、根据参数设置查询条件。
4、调用dao执行查询,得到一个ResultModel对象。
5、需要计算总页数。
6、返回ResultModel对象
参数:
1)主查询条件
2)根据商品分类名称过滤
3)价格区间过滤 0-9,10-19,20-29,30-* 可以使用字符串表示参数。
4)排序条件 int类型0:升序 1:降序
5)分页条件 int类型页码,从1开始。需要有默认值1
6)每页显示的记录数
返回值:ResultModel
6、controller
参数:
queryString
catalog_name
price
page
sort
页面需要的数据:
key:
result
value:
ResultModel对象
返回值:
String逻辑视图
业务逻辑:
1)接收表单提交的数据
2)调用Service把参数传递给Service
3)把结果传递给jsp
4)把查询参数回显
5)返回逻辑视图
请求的url:
/list.action

solr第二天 京东案例的更多相关文章

  1. solr第二天 京东案例 课程文档 有用

    全文检索技术   Lucene&Solr               Part3 1. 课程计划 1. Solr配置中文分析器 a) Schema.xml的配置 b) 配置IKAnalyzer ...

  2. javascript进阶教程第二章对象案例实战

    javascript进阶教程第二章对象案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过案例练习补充几个之前没有见到或者虽然讲过单是讲的不仔细的知识点. 二.具体实例 温馨提示 面向对象的知 ...

  3. Solr第二讲——SolrJ客户端的使用与案例

    一.Solrj的使用 1.什么是Solrj solrj是访问Solr服务的java客户端(就像通过jedis操作redis一样),提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过Sol ...

  4. 第二章 JavaScript案例(中)

    1. js事件 HTML代码 <!DOCTYPE html> <html lang="en" onUnload="ud()"> < ...

  5. Solr的核心操作案例

    @Service public class SearchServiceImpl implements SearchService { @Autowired private SolrTemplate s ...

  6. Lucene&Solr框架之第三篇

    1.SolrCore的配置 a)schma.xml文件 b)配置中文分析器 2.配置业务域和批量索引导入 a)配置业务域 b)批量索引导入 c)Solrj复杂查询(用Query页面复杂查询.用程序实现 ...

  7. 学习opencv中文版教程——第二章

    学习opencv中文版教程——第二章 所有案例,跑起来~~~然而并没有都跑起来...我只把我能跑的都尽量跑了,毕竟看书还是很生硬,能运行能出结果,才比较好. 越着急,心越慌,越是着急,越要慢,越是陌生 ...

  8. Xposed 框架 hook 简介 原理 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. Lucene与Solr基础

    SolrSelectTest 查询与删除 package com.snow.solr; import com.snow.bean.Product; import org.apache.solr.cli ...

随机推荐

  1. Eclipse环境搭建配置操作

    1.选择window 2.设置字体 3.设置编码格式:国际编码:UTF-8 第一个地方设置编码格式 第二个地方设置编码格式:这个更重要些 4.配置26个英文小写字母. 作用:能够在开发时提示你,快速开 ...

  2. springboot 自定义属性

    前言 spring boot使用application.properties默认了很多配置.但需要自己添加一些配置的时候,我们如何添加呢 1.添加自定义属性 在src/main/resources/a ...

  3. Oracle变量的定义、赋值及使用

    首先我们来看看代码,然后我们在说明和解释代码: declare l_dept ; currtime date := sysdate; l_nam ) :),'yyyymmdd'); -- to_cha ...

  4. Spring aop 记录操作日志 Aspect 自定义注解

    时间过的真快,转眼就一年了,没想到随手写的笔记会被这么多人浏览,不想误人子弟,于是整理了一个优化版,在这里感谢智斌哥提供的建议和帮助,话不多说,进入正题 所需jar包 :spring4.3相关联以及a ...

  5. android栈和队列

    android栈和队列 栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,故又称它们为运算受限的线性表.LinkedList数据结构是一种双向的链式结构,每一 ...

  6. [教程]centos卸载、安装mysql(源码编译安装方式)

    -----------1 卸载系统自带的msyql包 rpm -qa|grep mysql rpm -e --nodeps mysql-server-5.1.71-1.el6.x86_64 --强制卸 ...

  7. erlang分布式例子

    抄袭自 http://www.blogjava.net/killme2008/archive/2007/06/29/127099.html 简单的说,就是 主机上需要同时启用短节点名,或者长节点名 保 ...

  8. php小白和菜鸟 上班路上可以看的修行博客

    上班地铁 公交上我们不要去追剧 不要去打游戏 不要看看有效性的海量新闻, 我们需要去技术博客里遨游, 下面就推荐点与php有关的可以学习的技术博客; 大部分程序员在自学的道路上不知道走了多少坑,这个视 ...

  9. HTTP-POST

    POST方式:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项,Post被设计成用统一的方法实现下列功能: 1:对现有资源的解释: 2:向电 ...

  10. go基本数据类型与运算符

    GO基本类型1.布尔(bool) 长度:1字节 取值范围:true,false 注意事项:不可用数字代表true或false2.整型(int/uint) 根据平台 肯能为32位或64位3. 8位整型: ...