solr学习(二)-java调用solr 7.2.1

1、新增core,如图:

solr学习(二)-java调用solr 7.2.1_第1张图片

2、可能会报错,如图:

solr学习(二)-java调用solr 7.2.1_第2张图片

3、在tomcat\webapps\solr\solrhome下已经有了new_core的文件夹,但是里面没有任何内容,这时将tomcat\webapps\solr\solrhome\configsets\sample_techproducts_configs下的conf文件夹拷贝到tomcat\webapps\solr\solrhome下,重新Add Core成功,如图:

solr学习(二)-java调用solr 7.2.1_第3张图片

4、在maven项目pom.xml中引入包:

    

      junit
      junit
      3.8.1
    
    
        org.apache.solr
        solr-solrj
        7.2.1
    
    
        org.slf4j
        slf4j-log4j12
        1.7.7
    
    
        commons-logging
        commons-logging
        1.1.3
    
  

5、编写java代码:

Person.java

package com.shan.test.bean;

import org.apache.solr.client.solrj.beans.Field;

public class Person {
	
	@Field(value="id")
	private String id;
	
	@Field(value="name")
	private String name;
	
	@Field(value="description")
	private String description;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}
	
}

SolrUtil.java

package com.shan.test.util;

import java.io.IOException;
import java.util.List;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient.Builder;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;

import com.shan.test.bean.Person;

public class SolrUtil {
	//指定solr服务器的地址  
    private final static String SOLR_URL = "http://localhost:8080/solr/";  

    /**
     * 创建SolrServer对象
     * 
     * 该对象有两个可以使用,都是线程安全的  
     * 1、CommonsHttpSolrServer:启动web服务器使用的,通过http请求的 
     * 2、 EmbeddedSolrServer:内嵌式的,导入solr的jar包就可以使用了  
     * 3、solr 4.0之后好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为HttpSolrClient
     * 
     * @return
     */
    public HttpSolrClient createSolrServer(){
        HttpSolrClient solr = null;
        solr = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
        return solr;
    }


    /**
     * 往索引库添加文档
    * @throws IOException 
    * @throws SolrServerException 
     */
    public void addDoc() throws SolrServerException, IOException{
       //构造一篇文档  
       SolrInputDocument document = new SolrInputDocument();  
       //往doc中添加字段,在客户端这边添加的字段必须在服务端中有过定义  
       document.addField("id", "8");  
       document.addField("name", "周新星");  
       document.addField("description", "一个灰常牛逼的军事家");  
       //获得一个solr服务端的请求,去提交  ,选择具体的某一个solr core
       HttpSolrClient solr = new HttpSolrClient.Builder(SOLR_URL + "my_core").withConnectionTimeout(10000).withSocketTimeout(60000).build();
       solr.add(document);
       solr.commit();
       solr.close();
    }


    /** 
     * 根据id从索引库删除文档 
     */
    public void deleteDocumentById() throws Exception {  
        //选择具体的某一个solr core
        HttpSolrClient server = new HttpSolrClient.Builder(SOLR_URL + "my_core").withConnectionTimeout(10000).withSocketTimeout(60000).build();  
        //删除文档  
        server.deleteById("8");  
        //删除所有的索引
        //solr.deleteByQuery("*:*");
        //提交修改  
        server.commit();  
        server.close();
    }  

    /**
     * 查询
    * @throws Exception 
     */
    public void querySolr() throws Exception{
        HttpSolrClient solrServer = new HttpSolrClient.Builder(SOLR_URL + "my_core/").withConnectionTimeout(10000).withSocketTimeout(60000).build();  
        SolrQuery query = new SolrQuery();  
        //下面设置solr查询参数
        //query.set("q", "*:*");// 参数q  查询所有   
        query.set("q","周星驰");//相关查询,比如某条数据某个字段含有周、星、驰三个字  将会查询出来 ,这个作用适用于联想查询

        //参数fq, 给query增加过滤查询条件  
        query.addFilterQuery("id:[0 TO 9]");//id为0-4  

        //给query增加布尔过滤条件  
        //query.addFilterQuery("description:演员");  //description字段中含有“演员”两字的数据

        //参数df,给query设置默认搜索域  
        query.set("df", "name");  

        //参数sort,设置返回结果的排序规则  
        query.setSort("id",SolrQuery.ORDER.desc);

        //设置分页参数  
        query.setStart(0);  
        query.setRows(10);//每一页多少值  

        //参数hl,设置高亮  
        query.setHighlight(true);  
        //设置高亮的字段  
        query.addHighlightField("name");  
        //设置高亮的样式  
        query.setHighlightSimplePre("");  
        query.setHighlightSimplePost(""); 

        //获取查询结果
        QueryResponse response = solrServer.query(query);  
        //两种结果获取:得到文档集合或者实体对象

        //查询得到文档的集合  
        SolrDocumentList solrDocumentList = response.getResults();  
        System.out.println("通过文档集合获取查询的结果"); 
        System.out.println("查询结果的总数量:" + solrDocumentList.getNumFound());  
        //遍历列表  
        for (SolrDocument doc : solrDocumentList) {
            System.out.println("id:"+doc.get("id")+"   name:"+doc.get("name")+"    description:"+doc.get("description"));
        } 

        //得到实体对象
        List tmpLists = response.getBeans(Person.class);
        if(tmpLists!=null && tmpLists.size()>0){
            System.out.println("通过文档集合获取查询的结果"); 
            for(Person per:tmpLists){
                System.out.println("id:"+per.getId()+"   name:"+per.getName()+"    description:"+per.getDescription());
            }
        }
    }

    public static void main(String[] args) throws Exception {
        SolrUtil solr = new SolrUtil();
//        solr.createSolrServer();
        solr.addDoc();
        solr.deleteDocumentById();
        solr.querySolr();
   }
}

可以执行main方法进行测试,如果是正式的项目,可以封装一个公共类。

相关文章:

《solr学习(一)-solr 7.2.1搭建(windows系统)》

《solr学习(三)-用jetty启动调用solr 7.2.1》

《solr学习(四)-solr 7.2.1 导入Mysql数据库,表数据》

你可能感兴趣的:(搜索引擎,solr)