solr全文检索

本文介绍如何使用Spring Boot整合Solr进行全文检索,包括配置Solr、创建实例、导入数据、实现检索功能及编写定时任务更新Solr。通过具体代码示例,展示如何在Java应用中调用SolrClient进行查询,并手动封装结果。
摘要由CSDN通过智能技术生成

(1)安装solr,修改配置文件中的数据库、实例(需要检索的字段)、分词器等;(详情见上篇博文)。
(2)控制台创建实例、导入数据(详情见上篇博文);
(3)导包:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>

(3)全文检索时,将查询的字段、字段名传入solrClient的query方法,设置q、start、rows属性,得到SolrDocument的结果集,循环手动封装到实体类中。

public class SolrService {
    @Autowired
    private SolrClient solrClient;
	@Autowired
	private ProductDAO productDAO;
	
    public List<Product> getSolr(String keyword) {
    String p ="proName:"+"*"+keyword+"*";
    ModifiableSolrParams params = new ModifiableSolrParams();
    params.add("q",p);
    //分页(默认10)
    params.add("start","0");
    params.add("rows","5");
    List<Product> productList = new ArrayList<>();
    try {
        QueryResponse queryResponse = solrClient.query(params);
        SolrDocumentList solrDocuments = queryResponse.getResults();
        Product product = new Product();
        for (SolrDocument solrDocument : solrDocuments) {
            Object bookName = solrDocument.get("proName");
            Object id = solrDocument.get("id");
            String s = id.toString();
            Product product1 = productDAO.selectProductById(Integer.valueOf(s));
            productList.add(product1);
        }
    } catch (SolrServerException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    	return productList;
 }
}

(4)写一个定时任务定时更新solr。

@Component
@Configurable
@EnableScheduling
public class ScheduledTasks {
    /**
     * 定时跟新solr服务器
     */
    @Autowired
    private SolrClient solrClient;
    
    @Scheduled(cron = "0 0 0 1/1 * ?")
    public void reportCurrentTime(){
        SolrQuery query = new SolrQuery();
        query.setRequestHandler("/dataimport");

        String command = "delta-import";
        String clean =  "false";
        String optimize = "false";

        query.setParam("command", command)
                .setParam("clean", false)
                .setParam("commit", "true")
//	             .setParam("entity", "")
                .setParam("optimize", optimize);
        try {
            solrClient.query(query);
            solrClient.commit();
            System.out.println(" ///"+command);
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值