关于SolrJ的简单应用

前提条件:添加相关solrj jar包

1.获取HttpSolrClient
public class SolrServer {
private static HttpSolrClient server = null;
private static String url = “http://localhost:8080/solr/solr_test“;

/** 获取server*/
public static HttpSolrClient getSolrClient(){
    if(null == server){

        server = new HttpSolrClient(url);

        server.setAllowCompression(true);
        server.setFollowRedirects(true);
        server.setMaxTotalConnections(10000);
        server.setDefaultMaxConnectionsPerHost(1000);
        server.setSoTimeout(60000);//1 minute
    }

    return server;
}

}

注:HttpSolrClient有两种实现方式:
SolrClient client = new HttpSolrClient(“http://my-solr-server:8983/solr/core1“);
QueryResponse resp = client.query(new SolrQuery(“:“));
SolrClient client = new HttpSolrClient(“http://my-solr-server:8983/solr“);
QueryResponse resp = client.query(“core1”, new SolrQuery(“:“));
注:第一种定位到相应的core地址;第二种则在使用的时候才定位到相应的core地址

2.add

HttpSolrClient 下有两种类型的add
第一种:
UpdateResponse add(SolrInputDocument doc)
Adds a single document
添加一个简单的SolrInputDocument ,代码如下:
HttpSolrClient solrClient = SolrServer.getSolrClient();

    SolrInputDocument doc = new SolrInputDocument();
    doc.setField("id", "1001");
    doc.setField("name", "laowang");
    doc.setField("score", "99");


    solrClient.add(doc);
    solrClient.commit();

注意:相关Field字段需提前定义在{tomcat-home}/solr/solr-test/conf/schema.xml文件中

第二种:(注意:该方法更常用)
UpdateResponse addBean(Object obj)
Adds a single bean The bean is converted to a SolrInputDocument by the client’s DocumentObjectBinder

注:可以直接添加实体类对象,避免写大量的Field
代码如下:

首先定义一个实体类
public void addBean(){
HttpSolrClient solrClient = SolrServer.getSolrClient();

    User u = new User(1003,"wangwu",50);

    try {
        solrClient.addBean(u);
        solrClient.commit();
    } catch (SolrServerException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

方法调用如下:

public class User {
@Field
private int id;
@Field
private String name;
@Field(value=”score_i”)
private int score;

以上两种均有添加List的方式

3.delete

public void delete(){
HttpSolrClient client = SolrServer.getSolrClient();

    try {
        //第一种方式,根据ID删除
        UpdateResponse deleteById = client.deleteById("1001");

        //第二种方式,根据条件删除
        UpdateResponse deleteByQuery = client.deleteByQuery("id:1001");
        client.commit();

    } catch (SolrServerException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

注:还有可以进行批量删除的方法、根据查询删除的方法
UpdateResponse deleteById(List ids)
Deletes a list of documents by unique ID
UpdateResponse deleteByQuery(String query)
Deletes documents from the index based on a query

4.query

public void query(){

    HttpSolrClient client = SolrServer.getSolrClient();
    SolrQuery query = new SolrQuery();
    query.setQuery("*:*");

    //添加条件
    query.setQuery("id:1000 OR id:1001");

// query.setFields(“id”);

    query.setStart(0);
    query.setRows(5);
    try {
        QueryResponse query2 = client.query(query);

        //第一种方式,获取document,然后逐字段获取
        SolrDocumentList results = query2.getResults();
        for (int i = 0; i < results.size(); i++) {

            SolrDocument solrDocument = results.get(i);
            System.out.println("id -> "+solrDocument.getFieldValue("id"));
            System.out.println("name -> "+solrDocument.getFieldValue("name"));
            System.out.println("score -> "+solrDocument.getFieldValue("score_i"));

            System.out.println("*********");
        }

        //第二种方式,获取bean对象,然后逐字段获取
        List<User> beans = query2.getBeans(User.class);
        for (User user : beans) {
            System.out.println("id -> "+user.getId());
            System.out.println("name -> "+user.getName());
            System.out.println("score -> "+user.getScore());

        }
    } catch (SolrServerException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

注:常用查询参数说明
q-查询字符串,必须指定
query.set(“q”, “:“);
fl-返回哪些字段内容,用逗号或空格分开
query.set(“fl”, “id,name”);
start-返回第一条记录在完整找到结果中的偏移量,0开始
query.setStart(0);
rows-返回指定结果中最多有多少条记录,配合start来实现分页
query.setRows(5);
sort-排序,asc升序、desc降序,默认降序
query.addSort(“score_i”, ORDER.desc);
wt-指定输出格式,可以有xml,json,html等

以下为solr检索运算符:

指定字段查指定值,如返回所有值 :
? 任意单个字符的通配 如:
query.setQuery(“name:laowan?”);
* 任意多个字符的通配,如:
query.setQuery(“name:laowa*”);

布尔操作符:AND OR && ||
query.setQuery(“name:laowang or zhaoliu”)
[ ] 包含检索范围,如检索某段时间范围 包含头尾 ,score_i:[50 TO 110] 则检索score在50-110之内的,包含50和110
{ } 包含检索范围,不包含头尾,如 score_i:{50 TO 110} 则检索score在50-110之内的

另:下一篇会发表有关于Solr集群相关内容。。所有内容经得起测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恐龙弟旺仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值