Solr使用总结

 先记录下实例

配置文件

spring.data.solr.host=http://localhost:8983/solr

maven依赖
<dependency>
     <groupId>org.springframework.data</groupId>
     <artifactId>spring-data-solr</artifactId>
     <version>${spring.data.solr.version}</version>
</dependency>


/**
 * @Author: liuxs
 * @Description: 通过solr检索银行信息
 * @Date: Create in 18:28 2018/7/30.
 */
@Service
public class BankSolrService {

    @Autowired
    private BankRepository bankRepository;

    @Autowired
    private SolrClient solrClient;

    public List<BankBranch> queryBranch(QueryBankBean queryBean) throws Exception {
        List<BankBranch> bankBranches = new ArrayList<>();
        QueryResponse response = solrClient.query("my_core", convertQuery(queryBean));
        SolrDocumentList results = response.getResults();
        // 数量,分页用
        long total = results.getNumFound();
        for (SolrDocument document : results) {
            bankBranches.add(covertBankBranch(document));
        }
        return bankBranches;
    }

    /**
     * 整合检索参数
     * @param queryBean
     * @return
     * todo 硬编码抽出
     */
    public SolrQuery convertQuery(QueryBankBean queryBean) {
        SolrQuery solrQuery = new SolrQuery();
        if (StringUtils.isEmpty(queryBean.getBankName())) {
            throw new RuntimeException("银行名称不能为空");
        }
        if (StringUtils.isEmpty(queryBean.getBranchName())) {
            throw new RuntimeException("银行支行名称不能为空");
        }
        String bankCode = bankRepository.findBankCodeByAliasName(queryBean.getBankName());
        solrQuery.setQuery("branchName=" + queryBean.getBankName() + queryBean.getBranchName());
        solrQuery.addFilterQuery("bankCode=" + bankCode);

        //分页,默认10条每页
        solrQuery.setRows(queryBean.getSize());
        if (StringUtils.isEmpty(queryBean.getPage())) {
            solrQuery.setStart(0);
        } else {
            solrQuery.setStart(queryBean.getPage() * solrQuery.getRows());
        }
        return solrQuery;
    }

    /**
     * Document To Object
     * @param d
     * @return
     */
    private BankBranch covertBankBranch(SolrDocument d) {
        BankBranch branch = new BankBranch();
        branch.setRelateCode(d.containsKey("relateCode") ? String.valueOf(d.get("relateCode")) : "");
        branch.setBranchName(d.containsKey("branchName") ? String.valueOf(d.get("branchName")) : "");
        branch.setBankCode(d.containsKey("bankCode") ? String.valueOf(d.get("bankCode")) : "");
        branch.setBankName(d.containsKey("bankName") ? String.valueOf(d.get("bankName")) : "");
        branch.setProvinceCode(d.containsKey("provinceCode") ? String.valueOf(d.get("provinceCode")) : "");
        branch.setProvinceName(d.containsKey("provinceName") ? String.valueOf(d.get("provinceName")) : "");
        branch.setCityCode(d.containsKey("cityCode") ? String.valueOf(d.get("cityCode")) : "");
        branch.setCityName(d.containsKey("cityName") ? String.valueOf(d.get("cityName")) : "");
        return branch;
    }

}
原文地址:https://www.cnblogs.com/liuxs13/p/9406087.html