全文检索服务器
1Solrj的使用
1.1什么是solrj
SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAVA接口。SolrJ针对 Solr提供了Rest 的HTTP接口进行了封装, SolrJ底层是通过使用HttpClient中的方法来完成Solr的操作。
1.2搭建工程
Solrj的依赖包和核心包
D: \solr\solr-7.1.0\dist\solrj-lib 所有的jar包
D: \solr\solr-7.1.0\dist\solr-solrj-7.1.0.jar
Solr的扩展服务包
D:\guoweixin\solr\solr-7.1.0\server\lib\ext
对于用Maven构建的项目, pom.xml配置:
org.apache.solr solr-solrj 7.1.01.3使用solrj完成索引维护
1.3.1Java对象绑定
SolrJ提供两个有用的接口,UpdateResponse 和 QueryResponse,它们可以很方便的处理特定域的对象,可以使您的应用程序更容易被理解。SolrJ支持通过@Field注解隐式转换文档与任何类。
每个实例变量在Java对象可以映射到一个相应的Solr字段中,使用 field注解。
查看data-config.xml配置:
@Data
public class Products {
@Field(“id”)
private String pid;
@Field(“prod_pname”)
private String pname;
private String catalog;
@Field(“prod_catalog_name”)
private String catalogName;
@Field(“prod_price”)
private double price;
private Integer number;
@Field(“prod_description”)
private String description;
@Field(“prod_picture”)
private String picture;
private Date releaseTime;
}
1.3.2添加/修改索引
在solr中,索引库中都会存在一个唯一键,如果一个Document的id存在,则执行修改操作,如果不存在,则执行添加操作。
1.3.3删除索引
1.3.3.1根据指定ID来删除
1.3.3.2根据条件删除
1.3.4查询索引
1.3.4.1简单查询
1.3.4.2复杂查询
1.3.4.2.1solr的查询语法
1.q查询关键字,查询所有使用*😗。
请求的q是字符串
多个条件可以:之间用 AND 或 OR 关联
2.fq (filter query)过滤查询,作用:在q查询符合结果中同时是fq查询符合的,例如:
请求fq是一个数组(多个值)(默认是and)
如果多选相同的类别 : prod_catalog_name:魅力女人 or 手机饰品
过滤查询价格从1到1的记录。
也可以在“q”查询条件中使用product_price:[1 TO 20],如下:
也可以使用“*”表示无限,例如:
10以上:
10以下:
3.sort 排序,格式:sort=+<desc|asc>[,+<desc|asc>]…. 示例:
按价格降序
4.start - 分页显示使用,开始记录下标,从0开始
5.rows - 指定返回结果最多有多少条记录,配合start来实现分页。
实际开发时,知道当前页码和每页显示的个数最后求出开始下标。
6.fl - 指定返回那些字段内容,用逗号或空格分隔多个(回显)
7.df-指定一个搜索默认Field
8.wt - (writer type)指定输出格式,
9.hl 是否高亮 ,设置高亮Field,设置格式前缀和后缀。
hl.fl 指定高亮域的名称
1.3.4.2.2代码
2电商模仿案例
2.1需求(模仿淘宝或京东)
使用Solr实现电商网站中商品信息搜索功能,可以根据关键字、分类、价格搜索商品信息,也可以根据价格进行排序,同时还可以分页。
2.1.1架构分析
Solrj服务器:
提供搜索和索引服务
2.2工程搭建
2.2.1Spring整合Solr:
2.2.2SpringBoot整合Solr
Pom.xml
org.springframework.boot
spring-boot-starter-data-solr
Application.yml
spring:
data:
solr:
host: http://localhost:9080/solr/core_jd
Service
@Autowired
SolrClient solrClient;
2.3代码实现
2.3.1Pojo
2.3.2Service
Service接口
Service实现类
多选:prod_catalog_name:幽默杂货 or prod_catalog_name:手机饰品
2.3.3Controller