java solrrequest_solr java代码

添加依赖

org.springframework.boot

spring-boot-starter-data-solr

1、controller

@PostMapping("/solrSearchDemand")

@ResponseBody

public JsonResponse solrSearchDemand(@RequestBody SolrDemandSerachPageListRequest request) {

PageListResponse 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 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 tagName;

@Field

private List tagId;

get set 省

3、PageListResponse如下

import java.util.List;

public class PageListResponse {

/**

* 列表数据

*/

private List records;

/**

* 总的数量

*/

private long totalRecords;

private int page;

private int pageSize;

public List getRecords() {

return records;

}

public void setRecords(List 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 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 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);

}

}

注:有些包我没弄出来,所以有些代码是导包道不了,是可以用其它替代的,自己自行替换,要看自己的学习能力了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Solr是一个强大的搜索引擎,支持增量更新,可以通过Java代码实现Solr的增量更新。 增量更新是指只更新发生了改变的数据,而不是全部数据。实现方式可以通过在每个数据上添加时间戳或者版本号,当数据发生改变时,只更新时间戳或者版本号发生了改变的数据。 下面是一个使用Java代码实现Solr增量更新的示例: ```java // 创建SolrClient对象 SolrClient solrClient = new HttpSolrClient.Builder("http://localhost:8983/solr/my_core").build(); // 创建SolrInputDocument对象 SolrInputDocument document = new SolrInputDocument(); document.addField("id", "1"); document.addField("name", "new name"); document.addField("timestamp", new Date()); // 创建UpdateRequest对象 UpdateRequest updateRequest = new UpdateRequest(); updateRequest.add(document); updateRequest.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true); // 执行增量更新操作 UpdateResponse response = updateRequest.process(solrClient); solrClient.close(); ``` 在这个示例中,我们创建了一个SolrClient对象,指定了Solr服务器的地址和core名称。然后创建了一个SolrInputDocument对象,添加了需要更新的数据字段,包括id、name和timestamp。接着,我们创建了一个UpdateRequest对象,并将SolrInputDocument对象添加到UpdateRequest对象中。最后,执行增量更新操作,并关闭SolrClient对象。 需要注意的是,Solr需要在schema.xml中配置时间戳或版本号字段,以支持增量更新。在上面的示例中,我们添加了一个名为timestamp的时间戳字段,Solr会根据这个字段来判断是否需要更新数据。 总的来说,使用Java代码实现Solr增量更新非常简单,只需要创建SolrClient对象、SolrInputDocument对象和UpdateRequest对象,然后执行增量更新操作即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值