标签:取数 ESS one ppi factor solrj dep record red
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
1、controller
@PostMapping("/solrSearchDemand")
@ResponseBody
public JsonResponse solrSearchDemand(@RequestBody SolrDemandSerachPageListRequest request) {
PageListResponse<DemandSolrModel> responseBody = new PageListResponse<>();
Pageable pageable = null;
if (StringUtils.isNotBlank(request.getSort()) && StringUtils.isNotBlank(request.getDirection())) {
Sort.Order demandSort = new Order(Sort.Direction.valueOf(request.getDirection()), request.getSort());
Sort sort = new Sort(demandSort);
pageable = request.getPageable(sort);
} else {
pageable = request.getPageable("createTime", Sort.Direction.DESC);
}
final Page<DemandSolrModel> page = demandSolrService.filterTitleUsernameContent(request.getTerm(), request.getTagId(), request.getAppId(),request.getHasHot(), pageable);
if (!page.hasContent()) {
responseBody.setRecords(Collections.emptyList());
}
responseBody.setRecords(page.getContent());
responseBody.setPage(request.getPage());
responseBody.setPageSize(request.getPageSize());
responseBody.setTotalRecords(page.getTotalElements());
return JsonResponse.success(responseBody);
}
2、SolrDemandSerachPageListRequest 类如下
public class SolrDemandSerachPageListRequest extends PageListRequest {
/**
* 标签名查找
*/
private Integer tagId;
private Integer appId;
private Boolean hasHot;
public Boolean getHasHot() {
return hasHot;
}
public void setHasHot(Boolean hasHot) {
this.hasHot = hasHot;
}
public Integer getTagId() {
return tagId;
}
public void setTagId(Integer tagId) {
this.tagId = tagId;
}
public Integer getAppId() {
return appId;
}
public void setAppId(Integer appId) {
this.appId = appId;
}
}
PageListRequest类如下:
import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; public class PageListRequest { /** * 搜索的关键字 */ private String term; /** * 排序的字段 */ private String sort; /** * 排序的方向 */ private String direction; /** * 页码从1开始 */ private int page; /** * 条数 */ private int pageSize; public String getSort() { return sort; } public void setSort(String sort) { this.sort = sort; } public String getDirection() { return direction; } public void setDirection(String direction) { this.direction = direction; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public String getTerm() { return term; } public void setTerm(String term) { this.term = term; } public Sort.Direction getDirection(Sort.Direction defaultDirection) { if (StringUtils.isBlank(direction)) { return defaultDirection; } return Sort.Direction.valueOf(direction); } public Sort getSort(String defaultSortField, Sort.Direction defaultDirection) { if (StringUtils.isNotBlank(sort)) { Sort sort = new Sort(getDirection(defaultDirection), this.sort); return sort; } else { Sort sort = new Sort(getDirection(defaultDirection), defaultSortField); return sort; } } public Pageable getPageable(String defaultSortField, Sort.Direction defaultDirection) { // Pageable 页码是从0开始的,所以要减1操作 PageRequest pageRequest = new PageRequest(this.page - 1, this.pageSize, getSort(defaultSortField, defaultDirection)); return pageRequest; } public Pageable getPageable(Sort defaultSort) { // Pageable 页码是从0开始的,所以要减1操作 PageRequest pageRequest = new PageRequest(this.page - 1, this.pageSize, defaultSort); return pageRequest; } }
3、DemandSolrModel如下:
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.annotation.Id;
import org.springframework.data.solr.core.mapping.SolrDocument;
/*
solrCoreName = "demand"
对应服务器的名字,这里的一定要看我上一篇文章的solr文章里面的managed-schema配置文件里的第(1)点*/
@SolrDocument(solrCoreName = "demand")
public class DemandSolrModel implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Field
private int id;
@Field
private int userId;
@Field
private int appId;
@Field
private String content;
@Field
private Boolean hasHot;
@Field
private Date createTime;
@Field
private String title;
@Field
private String hyperlink;
@Field
private String fileUrl;
@Field
private String avatarImg;
@Field
private String username;
@Field
private List<String> tagName;
@Field
private List<Integer> tagId;
get set 省
3、PageListResponse如下
import java.util.List;
public class PageListResponse<E> {
/**
* 列表数据
*/
private List<E> records;
/**
* 总的数量
*/
private long totalRecords;
private int page;
private int pageSize;
public List<E> getRecords() {
return records;
}
public void setRecords(List<E> records) {
this.records = records;
}
public long getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(long totalRecords) {
this.totalRecords = totalRecords;
}
/*
* (non-Javadoc)
* @see org.springframework.data.domain.Page#getTotalPages()
*/
public int getTotalPages() {
return pageSize == 0 ? 1 : (int) Math.ceil((double) totalRecords / (double) pageSize);
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
4、service如下:
import com.messcat.imgrnt.solr.model.DemandSolrModel;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
public interface DemandSolrService {
Page<DemandSolrModel> filterTitleUsernameContent(String term, Integer tagId, Integer appId,Boolean hasHot, Pageable pageable);
void indexDemand(int id);
}
5、service实现类如下:
import com.messcat.common.Constants;
import com.messcat.framework.common.util.CommonsUtils;
import com.messcat.imgrnt.custom.dao.DemandSolrCustomDao;
import com.messcat.imgrnt.service.DemandSolrService;
import com.messcat.imgrnt.solr.model.DemandSolrModel;
import com.messcat.imgrnt.solr.repo.DemandSolrRepository;
import javax.annotation.Resource;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.AnyCriteria;
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.stereotype.Component;
@Component
public class DemandSolrServiceImpl implements DemandSolrService {
@Resource
private SolrTemplate solrTemplate;
@Autowired
private DemandSolrCustomDao demandSolrCustomDao;
@Autowired
private DemandSolrRepository demandSolrRepository;
@Override
public Page<DemandSolrModel> filterTitleUsernameContent(String term, Integer tagId, Integer appId,Boolean hasHot, Pageable pageable) {
SimpleQuery simpleQuery = new SimpleQuery();
/**
* 如果输入框的搜索条件不为空,则把条件加进去
*/
if (StringUtils.isNotBlank(term)) {
/*复制域*/
Criteria termCriteria = new Criteria(Constants.FIELD_TEXT).expression(CommonsUtils.quote(term));
simpleQuery.addCriteria(termCriteria);
}
if (tagId != null) {
Criteria contentCriteria = new Criteria("tagId").in(tagId);
simpleQuery.addCriteria(contentCriteria);
}
if (appId != null) {
Criteria contentCriteria = new Criteria("appId").is(appId);
simpleQuery.addCriteria(contentCriteria);
}
if (hasHot != null) {
Criteria contentCriteria = new Criteria("hasHot").is(hasHot);
simpleQuery.addCriteria(contentCriteria);
}
if (simpleQuery.getCriteria() == null) {
simpleQuery.addCriteria(AnyCriteria.any());
}
return solrTemplate.queryForPage(simpleQuery.setPageRequest(pageable), DemandSolrModel.class);
}
@Override
public void indexDemand(int id) {
/*1:根据新增的demand 的id ,从demang,demand_rel,demand_tag_rel,demand_tag,user表获取数据*/
DemandSolrModel demandSolrModel = demandSolrCustomDao.selectDemandSolrByDemandId(id);
/*2:创建索引*/
if (demandSolrModel == null) {
return;
}
demandSolrRepository.save(demandSolrModel);
}
}
6、SolrTemplate 配置文件如下:
import com.messcat.common.solr.MyHttpSolrClient; import org.apache.http.client.HttpClient; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.BinaryResponseParser; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.springframework.boot.autoconfigure.solr.SolrProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.solr.core.SolrTemplate; import org.springframework.data.solr.repository.config.EnableSolrRepositories; import org.springframework.util.StringUtils;
@SolrDocument(solrCoreName = "demand")
/*basePackages是指solr的实体类model所在的文件夹,因为要映射服务器 @SolrDocument=(solrCoreName="demand")*/ @Configuration @EnableSolrRepositories(basePackages = {"com.messcat.imgrnt.solr"}) @EnableConfigurationProperties(SolrProperties.class) public class SolrConfiguration { private final SolrProperties properties; public SolrConfiguration(SolrProperties properties) { this.properties = properties; } @Bean public SolrClient solrClient(HttpClient httpClient) { return createSolrClient(httpClient); } private SolrClient createSolrClient(HttpClient httpClient) { if (StringUtils.hasText(this.properties.getZkHost())) { return new CloudSolrClient(this.properties.getZkHost()); } return new MyHttpSolrClient(properties.getHost(), httpClient, new BinaryResponseParser()); } @Bean public SolrTemplate solrTemplate(SolrClient server) throws Exception { return new SolrTemplate(server); } }
注:有些包我没弄出来,所以有些代码是导包道不了,是可以用其它替代的,自己自行替换,要看自己的学习能力了
标签:取数 ESS one ppi factor solrj dep record red
原文地址:https://www.cnblogs.com/qq1141100952com/p/9744263.html