# 竞价系统-solr工具类

# 概述

由于solr也是竞价系统中比较常用的技术,但solr的语法是比较完整的一套,与以往的SQL语法截然不同。 为了降低solr的使用成本,将solrj方法进行了封装。封装的条件构造器SolrQueryWrapper是 参照MybatisPlus的QueryWrapper设计的,基本上掌握了QueryWrapper就能正常使用SolrQueryWrapper的基本功能。

# 增删查改

# 更新和插入

SolrUpdateUtil.updateBean("shoppingGoods", updateGoods);

# 查询

SolrQueryWrapper wrapper = new SolrQueryWrapper();
wrapper.eq("goodsId", goodsId);
//查询列表
List<ShoppingGoods> goodsList = SolrQueryUtil.queryList("shoppingGoods", wrapper, ShoppingGoods.class);
//查询分页
wrapper.page(0, 20);
SolrPage<ShoppingGoods> page = SolrQueryUtil.query("shoppingGoods", wraper, ShoppingGoods.class);

# 删除

//根据主键删除
SolrUpdateUtil.delete("shoppingGoods", goodsId); 
//根据查询删除
SolrUpdateUtil.deleteByQuery(SolrConstant.CO_RECOMMEND, "endBidtime:[* TO 2020-3-12T00:00:00Z]");

# 跨数据集联合查询

solr的联合查询只能用于过滤条件,而不能返回联合查询的另一数据集的任何一个字段。

//参数依次为另一数据集名称,本数据集联合字段,另一数据集联合字段,另一数据集查询构造器
wrapper.join("coOrderMain", "orderMainId", "orderMainId", item -> {
    //在另一数据集需要进行的筛选
    item .eq("orderStatus", "1");
});

# solr常用语法

  • eq(column, value) 全等查询
solr语法: column:value
  • like(column, value) 前后模糊匹配
solr语法: column:*value*
  • notLike(column, value) 不满足前后模糊匹配
solr语法: -column:*value*
  • likeLeft(column, value) 左模糊匹配
solr语法: column:*value
  • likeRight(column, value) 右模糊匹配
solr语法: column:value*
  • ge(column, value) 大于等于
solr语法: column:[value TO *}
  • gt(column, value) 大于
solr语法: column:{value TO *}
  • le(column, value) 小于等于
solr语法: column:[* TO value]
  • lt(column, value) 小于
solr语法: column:{* TO value}
  • between(column, lvalue, rvalue) 在指定区间内(闭区间)
solr语法: column:[lvalue TO rvalue]
  • between(column, lvalue, rvalue, false) 在指定区间内(开区间)
solr语法: column:{lvalue TO rvalue}
  • in(column, val1, val2, ...) 在指定值中
solr语法: column:(val1 OR val2 OR ...)
  • notIn(column, val1, val2, ...) 不在指定值中
solr语法: -column:(val1 OR val2 OR ...)
Last Updated: 3/13/2020, 9:21:23 AM