[Solr] Middleware-solr quick use

Add dependencies to pom:

        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>7.2.1</version>
        </dependency>

Provide a demo:

package com.xiaobai.util;

import org.apache.solr.client.solrj.impl.HttpSolrClient;

/**
 * @Author xiaobai
 * @Date 2023/6/25 9:35
 * @Title: SolrUtil
 * @Package com.xiaobai.util
 * @description:
 */
public class SolrUtil {
    
    
    /**
     * 获取SolrClient
     * solrj 6.5及以后版本获取方式
     *
     * @return
     */
    public static HttpSolrClient getSolrClient(String url) {
    
    
        /*
         * 设置超时时间
         * .withConnectionTimeout(10000)
         * .withSocketTimeout(60000)
         */
        return new HttpSolrClient.Builder(url)
                .withConnectionTimeout(10000)
                .withSocketTimeout(60000)
                .build();
    }
}


package com.xiaobai.util.main;

import com.xiaobai.util.SolrUtil;
import org.apache.commons.math3.stat.descriptive.summary.Product;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.FieldAnalysisRequest;
import org.apache.solr.client.solrj.response.AnalysisResponseBase;
import org.apache.solr.client.solrj.response.FieldAnalysisResponse;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;

import java.io.IOException;
import java.util.*;

/**
 * @Author xiaobai
 * @Date 2023/6/25 9:37
 * @Title: TestSolr
 * @Package com.xiaobai.util.main
 * @description:
 */
public class TestSolr {
    
    
    private final static String BASE_URL = "http://127.0.0.1:8983/solr";
    private final static String CORE_NAME = "hello_world";


    public static void query() throws Exception {
    
    
        // TODO Auto-generated method stub
        HttpSolrClient client = SolrUtil.getSolrClient(BASE_URL);
        Map<String, String> param = new HashMap<String, String>();
        param.put("q", "*:*");// 查询条件
        param.put("start", "0");
        param.put("rows", "2000000");// 返回记录数
        SolrParams sparam = new MapSolrParams(param);// 查询参数

        QueryResponse res = client.query(CORE_NAME, sparam);
        SolrDocumentList result = res.getResults();// 获取结果
        for (SolrDocument document : result) {
    
    // 遍历返回结果
            System.out.println("name==" + document.get("name") +
                    "id==" + document.get("id"));
        }
    }

    public static void add() throws SolrServerException, IOException {
    
    
        //构造一篇文档(对象)
        SolrInputDocument document = new SolrInputDocument();
        //往doc中添加字段,在客户端这边添加的字段必须在服务端中有过定义
        document.addField("id", "88888888");
        document.addField("name", "可可爱爱没有脑袋");
        //获得一个solr服务端的请求,去提交  ,选择具体的某一个solr core
        HttpSolrClient solr = new HttpSolrClient.Builder(BASE_URL + CORE_NAME).build();
        solr.add(document);
        solr.commit();
        solr.close();
    }

    /**
     * 根据id从索引库删除文档
     */
    public static void deleteById(String id) throws Exception {
    
    
        //选择具体的某一个solr core
        HttpSolrClient server = new HttpSolrClient.Builder(BASE_URL + CORE_NAME).build();
        //删除文档
        //server.deleteById("036cd386-fbb0-4dde-8c47-f580b938538e");
        server.deleteByQuery("id:"+id);
        //删除所有的索引
        //solr.deleteByQuery("*:*");
        //提交修改
        server.commit();
        server.close();
    }


    public static List<String> getAnalysis(String sentence) {
    
    
        SolrClient client = SolrUtil.getSolrClient(BASE_URL);
        FieldAnalysisRequest request = new FieldAnalysisRequest("/"+CORE_NAME+"/query");
        request.addFieldName("name");// 字段名,随便指定一个支持中文分词的字段
        request.setFieldValue("");// 字段值,可以为空字符串,但是需要显式指定此参数
        request.setQuery(sentence);
        FieldAnalysisResponse response = null;
        try {
    
    
            response = request.process(client);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        List<String> results = new ArrayList<String>();
        Iterator<AnalysisResponseBase.AnalysisPhase> it = response.getFieldNameAnalysis("name").getQueryPhases().iterator();
        while (it.hasNext()) {
    
    
            AnalysisResponseBase.AnalysisPhase pharse = it.next();
            List<AnalysisResponseBase.TokenInfo> list = pharse.getTokens();
            for (AnalysisResponseBase.TokenInfo info : list) {
    
    
                results.add(info.getText());
            }
        }
        return results;
    }


}


Guess you like

Origin blog.csdn.net/ruisasaki/article/details/131372207