solrJ6.5.1 使用

一、创建Maven工程,导入pom文件

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.4</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.4.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
        <version>4.5.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.noggit</groupId>
        <artifactId>noggit</artifactId>
        <version>0.6</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.21</version>
    </dependency>

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

    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.5.1-alpha</version>
    </dependency>
  </dependencies>

二、创建solr连接

package com.solr.server;

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

public class SolrServer {
    private static HttpSolrClient server = null;
    private static String url = "http://localhost:8081/solr/test";

    public static HttpSolrClient getServer() {
        if (server == null) {
            server = new HttpSolrClient(url);
            server.setDefaultMaxConnectionsPerHost(1000);
            server.setMaxTotalConnections(10000);//最大连接数
            server.setConnectionTimeout(60000);//设置连接超时时间(单位毫秒) 1000
            server.setSoTimeout(60000); 设置读数据超时时间(单位毫秒) 1000
            server.setFollowRedirects(false);//遵循从定向
            server.setAllowCompression(true);//允许压缩

        }
        return server;
    }

    public static void main(String[] args) {
        System.out.println(getServer());

    }

}

三、测试Solr原生增删改查

package com.solr.server;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

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

public class SolrTest {

    /**
     * 添加/修改 索引
     * @author xuye
     * Date: 2017年5月22日 下午3:10:53
     * @throws Exception
     */
    public static void addIndex() throws Exception {
        HttpSolrClient server = SolrServer.getServer();
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", "1003");
        doc.addField("name_s", "test3");//_s String类型
        doc.addField("score_i", "103");//_i 整型
        server.add(doc);
        server.commit();
        //添加多个
        Collection<SolrInputDocument> docs = new ArrayList();
        for (int i = 0; i < 10; i++) {
            SolrInputDocument doc2 = new SolrInputDocument();
            doc2.addField("id", i);
            doc2.addField("name_s", "test3");//_s String类型
            doc2.addField("score_i", i);//_i 整型
            docs.add(doc2);
        }
        server.add(docs);
        server.commit();
    }

    /**
     * 删除索引 按id
     * @author xuye
     * Date: 2017年5月22日 下午3:11:18
     * @throws Exception
     */
    public static void deleteById() throws Exception {
        HttpSolrClient server = SolrServer.getServer();
        server.deleteById("1002");//按id删除
        server.commit();
    }

    /**
     * 删除索引 按list
     * @author xuye
     * Date: 2017年5月22日 下午3:11:40
     * @throws Exception
     */
    public static void deleteByList() throws Exception {
        HttpSolrClient server = SolrServer.getServer();
        List<String> ids = new ArrayList();
        ids.add("1001");
        ids.add("1002");
        server.deleteById(ids);//按list删除
        server.commit();
    }

    /**
     * 查询索引
     * @author xuye
     * Date: 2017年5月22日 下午3:11:49
     * @throws Exception
     */
    public static void query() throws Exception {
        HttpSolrClient server = SolrServer.getServer();
        SolrQuery query = new SolrQuery();
        query.setQuery("*:*");
        query.setStart(0);//开始记录数
        query.setRows(10000);//总条数
        QueryResponse queryResponse = server.query(query);
        SolrDocumentList results = queryResponse.getResults();
        System.out.println("总条数为:" + results.getNumFound());
        for (int i = 0; i < results.size(); i++) {
            System.out.println(results.get(i).getFieldNames());
            System.out.println(results.get(i).getFieldValue("name_s"));
        }

    }

    public static void main(String[] args) throws Exception {
        deleteByList();

    }

}

四、创建TestBean

package com.solr.server;

import java.io.Serializable;

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

public class TestBean implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    @Field
    private String id;
    @Field
    private String name_s;
    @Field
    private Integer score_i;

    public String getId() {
        return this.id;
    }

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

    public String getName_s() {
        return this.name_s;
    }

    public void setName_s(String name_s) {
        this.name_s = name_s;
    }

    public Integer getScore_i() {
        return this.score_i;
    }

    public void setScore_i(Integer score_i) {
        this.score_i = score_i;
    }

    @Override
    public String toString() {
        return "TestBean [id=" + this.id + ", name_s=" + this.name_s + ", score_i=" + this.score_i + "]";
    }

}

五、使用SolrBean进行增删改查

package com.solr.server;

import java.util.ArrayList;
import java.util.List;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;

public class SolrBean {

    /**
     * 按Bean  添加/修改 索引
     * @author xuye
     * Date: 2017年5月22日 下午3:10:53
     * @throws Exception
     */
    public static void addIndex() throws Exception {
        HttpSolrClient server = SolrServer.getServer();
        //添加多个
        List<TestBean> docs = new ArrayList();
        for (int i = 6; i < 10; i++) {
            TestBean bean = new TestBean();
            bean.setId(i + "");
            bean.setName_s("test" + i);
            bean.setScore_i(i);
            docs.add(bean);
        }
        server.addBeans(docs);
        server.commit();
    }

    /**
     * 删除索引 按查询
     * @author xuye
     * Date: 2017年5月22日 下午3:11:18
     * @throws Exception
     */
    public static void deleteByQuery(String query) throws Exception {
        HttpSolrClient server = SolrServer.getServer();
        query = "*:*";
        server.deleteByQuery(query);
        server.commit();
    }

    //查询索引
    public static void query() throws Exception {
        HttpSolrClient server = SolrServer.getServer();
        SolrQuery query = new SolrQuery();
        query.setQuery("*:*");
        query.setStart(0);//开始记录数
        query.setRows(10000);//总条数
        QueryResponse queryResponse = server.query(query);
        List<TestBean> results = queryResponse.getBeans(TestBean.class);
        System.out.println("总条数为:" + results.size());
        for (TestBean testBean : results) {
            System.out.println(testBean.toString());
        }

    }

    public static void main(String[] args) throws Exception {
        deleteByQuery(null);
        addIndex();
    }

}

六、Solr 查询语法简单解析

package com.solr.server;

import java.util.List;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;

public class SolrQueryDemo {

    //查询索引
    public static void query() throws Exception {
        HttpSolrClient server = SolrServer.getServer();
        SolrQuery query = new SolrQuery();
        //query.setQuery("*:*");
        //query.set("q", "*:*");
        //query.set("q", "name_s:test1?");//?通配单个字符
        //query.set("q", "name_s:tes*");//*通配多个字符
        //query.set("q", "name_s:test~0.5");// ~ 模糊查询 可以直接用test~   test~0.5表示相似0.5以上的
        //如检索相隔10个单词的“apache”和”“akarta”,“jakarta apache”~10 
        query.set("q", "name_s:test15 or name_s:test16");

        /*布尔操作符AND、||
                                布尔操作符OR、&& 
                                布尔操作符NOT、!、-(排除操作符不能单独与项使用构成查询) 
           “+” 存在操作符,要求符号“+”后的项必须在文档相应的域中存在
         ( ) 用于构成子查询
                [ ] 包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710] 
                { }不包含范围检索,如检索某时间段记录,不包含头尾 
                date:{200707 TO 200710} 
                " 转义操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ ” ~ * ? : " */

        /*查询某个字段非空的记录 比如:fq=FieldName:[‘’ TO *] 查询FieldName非空的数据。
                            查询某个字段为空的记录 比如:查询公司名称为空的记录可以采用如下语法实现(似乎目前为止只有此方法可行):
                -company:[* TO *]
                            取反实例:fq=!fstate:1*/

        //“^”控制相关度检索,如检索jakarta apache,同时希望去让“jakarta”的相关度更加好,那么在其后加上”^”符号和增量值,即jakarta^4 apache
        query.set("fl", "score_i,name_s");//fl 查询字段
        query.set("sort", "score_i desc");//sort 排序方式,正序用asc
        //wt 输出格式:json xml等

        query.set("fq", "score_i:[15 TO *]");//分数>=15  fq 过滤条件:在q查询符合结果中同时是fq查询符合的
        query.setStart(0);//开始记录数
        query.setRows(10000);//总条数
        QueryResponse queryResponse = server.query(query);
        List<TestBean> results = queryResponse.getBeans(TestBean.class);
        System.out.println("总条数为:" + results.size());
        for (TestBean testBean : results) {
            System.out.println(testBean.toString());
        }

    }

    public static void main(String[] args) throws Exception {
        query();
    }

}

七、Solr 多核/Core 关联查询

package com.solr.server;

import java.util.List;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;

public class SolrMulticore {

    public static void query(String queryStr) throws Exception {
        HttpSolrClient server = SolrServer.getServer();
        SolrQuery query = new SolrQuery();
        query.setQuery(queryStr);
        //query.setStart(0);//开始记录数
        //query.setRows(30);//总条数
        query.set("start", 0);
        query.set("rows", 20);
        query.set("shards", "localhost:8081/solr/test"
                + ",localhost:8081/solr/core1"
                + ",localhost:8081/solr/core2");
        //shards可以关联多个core,用逗号分隔. id 是唯一主键,多个核的id要不一样
        QueryResponse queryResponse = server.query(query);
        List<TestBean> results = queryResponse.getBeans(TestBean.class);
        System.out.println("总条数为:" + results.size());
        for (TestBean testBean : results) {
            System.out.println(testBean.toString());
        }

    }

    public static void main(String[] args) throws Exception {
        query("*:*");
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值