您当前的位置: 首页 > 

恐龙弟旺仔

暂无认证

  • 0浏览

    0关注

    282博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

关于SolrJ的简单应用

恐龙弟旺仔 发布时间:2016-08-04 22:15:10 ,浏览量:0

前提条件:添加相关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 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集群相关内容。。所有内容经得起测试

关注
打赏
1655041699
查看更多评论
立即登录/注册

微信扫码登录

0.0454s