第九天总结

solr
lucecn 底层也是调用的它,但是它是一个java写的,只能用java调用
但是后期呢 solr是封装了它。抵用方式是REST,可以跨语言。

solr的安装,解压包,找到war 部署到tomcat 在web.xml
中需要改库的地址

启动有管理页面
solr对于数据库的优势
第一能分词
第二查询效率高。因为数据库要用like
第三 分了数据的压力
solrj官方的客户端 也就是http的访问方式
所以我们可以用httpClient 来自己实现参数封装和解析
我们用spring-data-solr 对上面的封装

入门
引入 spring-data-solr 这个会自动依赖solr-solrj

spring-test

junit
三个依赖

applicationContext-solr.xml
<solr:solr-server id = “solrServer” url=“http://127.0.0.1:8080/solr”/> 这个标签页是一个bean

@Field(“item_tittle”) 解决的是映射关系 这个注解是solrj 包中的
private String tittle;

java中的pojo对应solr的域

新增和更新
使用solrTemplate.saveBean(new POJO());
增加和修改都是这个方法,和数据库一样,根据id 修改
也支持事务。增删改 要commit();

根据id查询
solrTemplate.getById(id,Pojo.class):

根据id删除
solrTemplate.deleteById(“1”);怎么变成String了。框架自动转换

批量插入
首先利用for new POJO id+i tittle+i
创建100条数据
因为solrTemplate自动支持存集合,就是批量
我们可以储存成一个list来
saveBeans(List beans)

测试分页
查询的都是在管理页面查询的
ScoredPage page = solrTemplate.queryForPage(query,clazz);
page对象中封装了所有的数据,有点像mybatyis的分页插件
page.getContent();得到页的集合对象
可以用for打印每一个
page.getTotalElements(); 总记录树
page.getSize() ; 页的记录数
page.getTotalPages(); 总页数

query
是一个接口。我们看一下实现类
SimpleQuery
SimpleQuery query = new SimpleQuery(":"); 这个里面传入的是表达式
query.setOffset(20) 起始索引
query.setRows(20); 行数

条件查询
Criteria criteria = new Criteria(“item_category”).contains(“手机”)
criteria.and(“item_brand”).contains(“2”);
可以把contains 换成 is 就是=
query.addCriteria(criteria)

SimpleQuery query = new SimpleQuery(":"); 这个在你没有具体条件的时候必须要写上 星:星
solrTemplate.delete(query);
solrTemplate.commit();

如何
main{
new ClassPathXmlApplicationContext(“classpath*:spring/applicationContext*.xml”);
classpath后边的星是扫描jar的意思。因为要依赖一个jar 还要扫描jar的配置文件。所以都需要读取,没有环境,不能测试。
为什么要用sku
的呢,因为更详细的

动态域的问题
@Dynamic
@Field(“item_spec_*”)
private<String ,String> specMap;

引入fastJson 的jar
然后
{} 就是Object [] 就是Array
JSON.parseObject(item.getSpec(),Map.class); 为什么是map 因为key 不确定。没有别的办法。
会保存成一条数据的多个字段。动态结合。

查找关键字
我们新建一个Moudle 然后 也要相应的接口Moudle 这个工程只要solr相关的东西
有个依赖传递的问题。

接口定义
public List search(String keyword);因为会有很多条件
public Map search(Map map);
因为很多的查询条件也是根据关键字查出来的。

SimpleQuery query = new SimpleQuery(“星:星”);
new Criteria(“item_keywords”).is(map.getkey(“keywords”);
query.addCriteria(
ScoredPage page = solrTemplate.queryForPage(criteria,pojo.class);
map.put(“rows”,page.getContent());

@reference(timeout = 5000) 可以设置dobbo的超时时间。如果我们在服务端也配置了。以客户端为主。调用时候覆盖了。dobbo默认是1000.第一次可能由于虚拟机超时。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值