SolrJ
SolrJ是Solr的java客户端实现,通过java代码连接solr服务器,并使用。
依赖
1 | <dependency> |
对象绑定
@field注解,注解中的值为,该字段对应的solr域的名称
1 | public class Solr_pojo { |
单机模式
URL和HttpSolrClient
注意上下两个URL的区别
1 | //直接指定solr的URL和core1,只能查询或更新core1内容 |
1 | //指定solr的URL,查询或更新时要指定core |
新增和更新
方式①:add(SolrInputDocument)
1 | SolrInputDocument fields = new SolrInputDocument(); |
方式②:addBean
1 | Solr_pojo pojo=new Solr_pojo();//Solr_pojo是一个自定义的,与solr索引域对应的pojo类 |
其中UpdateResponse返回的是状态码和执行耗时。
删除
ById:
- 单个:
deleteById("id");
1 | UpdateResponse response = solrClient.deleteById("2248954774"); |
- 批量:
deleteById(List);
直接创建一个id的List集合
1 | List<String> ids=new ArrayList<>(); |
或
把按照一定格式,包含多个id的字符串,用split分成数组,然后再用Arrays.asList()方法把数组转成List集合
1 | String ids="224895477,2248954771,2248954772,2248954773,4564564564"; |
ByQuery:
deleteByQuery("x:x");删除所有查询到的数据。
1 | UpdateResponse response = solrClient.deleteByQuery("solr_title:手机"); |
查询
基本查询
1 | SolrQuery query=new SolrQuery("*:*"); |
结果筛选
- set方式
1 | query.set("fq","solr_price:[* TO 9999]","solr_title:联通"); |
- setFilterQueries方式
1 | query.setFilterQueries("solr_price:[* TO 9999]","solr_title:联通"); |
- addFilterQuery方式
1 | query.addFilterQuery("solr_price:[* TO 9999]"); |
结果排序
- addSort,
SolrQuery.ORDER.asc顺序,SolrQuery.ORDER.desc倒序
1 | query.addSort("solr_price", SolrQuery.ORDER.asc);//价格顺序 |
结果分页
- setStart、setRows
1 | int pageNum=5; |
结果回显
- set
1 | query.set("fl","*,score");//*表示显示全部信息,score表示增加匹配得分的显示 |
- setFields
1 | query.setFields("solr_title","score"); |
关键字高亮
1 | //开启高亮功能 |
响应集合
- 可直接将结果转为对象集合
1 | QueryResponse queryResponse = solrClient.query(query); |
响应头
- header包括查询的值、查询的条件、耗时、状态码、响应类型等信息。
1 | NamedList<Object> header = queryResponse.getHeader(); |
Results结果集、结果属性
- 查询结果
1 | //获取查询的结果集 |
- 高亮域替换查询结果
1 | List<Solr_pojo> solrPojos=new ArrayList<>(); |
集群模式
使用的SolrClient,由HttpSolrClient,变为CloudSolrClient,然后要记得设置默认索引集合,其他与单机模式一样。
1 | CloudSolrClient client=new CloudSolrClient("192.168.249.131:2181,192.168.249.131:2182,192.168.249.131:2183"); |