Solr-6.5.1之Solrj的使用

来源:互联网 发布:看书哪个软件好 编辑:程序博客网 时间:2024/06/04 18:33

第一步:添加maven依赖

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

第二步:书写solr连接类

package solrTest;import org.apache.solr.client.solrj.impl.HttpSolrClient;/** *  * @ClassName: SolrServer * @Description: solr连接类 * @author cheng * @date 2017年7月24日 上午9:15:51 */public class SolrServer {    private static HttpSolrClient server = null;    private static String url = "http://localhost:8080/Solr/db";//其中db为自定义的core名称    @SuppressWarnings("deprecation")    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());    }}

第三步:书写原生测试类

package solrTest;import java.io.IOException;import java.util.ArrayList;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.UUID;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrQuery.ORDER;import org.apache.solr.client.solrj.SolrQuery.SortClause;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.impl.HttpSolrClient;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 org.apache.solr.common.params.SolrParams;import org.apache.solr.common.util.NamedList;import org.junit.Test;import com.ahutshop.entity.GoodsType;/** *  * @ClassName: SolrTest * @Description:测试 * @author cheng * @date 2017年7月24日 上午9:16:58 */public class SolrTest {    /**     * 添加/修改 索引     * @throws Exception     */    public static void addIndex() throws Exception {        HttpSolrClient server = SolrServer.getServer();        SolrInputDocument doc = new SolrInputDocument();        doc.addField("typeId", UUID.randomUUID().toString().replace("-", ""));        // 修改相同id的信息        // doc.addField("typeId", "e0e2283932194628b6a5eee9c263c533");        doc.addField("typeName", "测试测试测试多个测试");        doc.addField("createTime", new Date());        doc.addField("updateTime", new Date());        server.add(doc);        server.commit();    }    /**     * 删除索引 按id     * @throws Exception     */    public static void deleteById() throws Exception {        HttpSolrClient server = SolrServer.getServer();        server.deleteById("48815aa736da482dbb47e1eed06cc68a");// 按id删除        server.commit();    }    /**     * 查询所有索引     * @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());            for (String name : results.get(i).getFieldNames()) {                System.out.println(results.get(i).getFieldValue(name));            }        }    }}

第四步:创建javabean

package com.ahutshop.entity;import java.io.Serializable;import java.util.Date;import org.apache.solr.client.solrj.beans.Field;/** *  * @ClassName: GoodsType * @Description: 商品类型实体类 * @author cheng * @date 2017年7月12日 下午5:37:33 */public class GoodsType implements Serializable{    private static final long serialVersionUID = -4039634130866820668L;    @Field    private String typeId;//类型id    @Field    private String typeName;//类型名称    @Field    private Date createTime;//创建时间    @Field    private Date updateTime;//更新时间    /**     * 重写tostring     */    @Override    public String toString() {        return "GoodsType [typeId=" + typeId + ", typeName=" + typeName + ", createTime=" + createTime + ", updateTime="                + updateTime + "]";    }    /**     * 无参构造函数     */    public GoodsType() {        super();    }    /**     * 有参构造函数     * @param typeId     * @param typeName     * @param createTime     * @param updateTime     */    public GoodsType(String typeId, String typeName, Date createTime, Date updateTime) {        super();        this.typeId = typeId;        this.typeName = typeName;        this.createTime = createTime;        this.updateTime = updateTime;    }    public String getTypeId() {        return typeId;    }    public void setTypeId(String typeId) {        this.typeId = typeId;    }    public String getTypeName() {        return typeName;    }    public void setTypeName(String typeName) {        this.typeName = typeName;    }    public Date getCreateTime() {        return createTime;    }    public void setCreateTime(Date createTime) {        this.createTime = createTime;    }    public Date getUpdateTime() {        return updateTime;    }    public void setUpdateTime(Date updateTime) {        this.updateTime = updateTime;    }}

第五步:使用SolrBean进行增删改查

public class SolrBean {    /**     * 按Bean 添加/修改 索引     * @throws Exception     */    public static void addIndex1() throws Exception {        HttpSolrClient server = SolrServer.getServer();        // 添加        //id如果重复则为修改        GoodsType type = new GoodsType(UUID.randomUUID().toString().replace("-", ""), "交通工具测试", new Date(), new Date());        server.addBean(type);        server.commit();    }    /**     * 删除索引 按查询     * @throws Exception     */    public static void deleteByQuery(String query) throws Exception {        HttpSolrClient server = SolrServer.getServer();        query = "*:*";        server.deleteByQuery(query);        server.commit();    }    // 查询索引    public static void query1() throws Exception {        HttpSolrClient server = SolrServer.getServer();        SolrQuery query = new SolrQuery();        query.setQuery("*:*");        query.setStart(0);// 开始记录数        query.setRows(10000);// 总条数        QueryResponse queryResponse = server.query(query);        List<GoodsType> results = queryResponse.getBeans(GoodsType.class);        System.out.println("总条数为:" + results.size());        for (GoodsType testBean : results) {            System.out.println(testBean.toString());        }       }}

第六步:solrj复杂查询

// 查询索引    public static void query1() throws Exception {        HttpSolrClient server = SolrServer.getServer();        SolrQuery query = new SolrQuery();        /*         * 1、常用 q :查询字符串,这个是必须的。如果查询所有*:* ,根据指定字段查询(Name:张三 AND Address:北京)         * 注意:AND要大写 否则会被当做默认OR         */        //query.setQuery("*:*");        /*         * fq : (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,         * 例如:q=查询全部&fq=只要title得值为:xxxx         */        //query.setFilterQueries("typeName:测试");        /*         * fl : 指定返回那些字段内容,用逗号或空格分隔多个。         */        // query.setFields("typeId,typeName");        /*         * sort : 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]…         * 。 示例:(score desc, price asc)表示先 “score” 降序, 再 “price” 升序,默认是相关性降序。         */        SortClause sort1 = new SortClause("createTime", ORDER.asc);        SortClause sort2 = new SortClause("updateTime", ORDER.desc);        List<SortClause> sortList = new ArrayList<SortClause>();        sortList.add(sort1);        sortList.add(sort2);        // query.setSort("createTime", ORDER.asc);        query.setSorts(sortList);        query.setQuery("typeName:测试"); // 设置查询关键字        query.setHighlight(true); // 开启高亮        query.addHighlightField("typeName"); // 高亮字段        query.setHighlightSimplePre("<font color='red'>"); // 高亮单词的前缀        query.setHighlightSimplePost("</font>"); // 高亮单词的后缀        query.setStart(0);// 开始记录数        query.setRows(10000);// 总条数        // QueryResponse queryResponse = server.query(query);        // List<GoodsType> results = queryResponse.getBeans(GoodsType.class);        // System.out.println("总条数为:" + results.size());        // for (GoodsType testBean : results) {        // System.out.println(testBean.toString());        // }        QueryResponse queryResponse = server.query(query);        List<GoodsType> results = queryResponse.getBeans(GoodsType.class);        int index = 0;        // 返回所有的结果...        SolrDocumentList documentList = queryResponse.getResults();        Map<String, Map<String, List<String>>> maplist = queryResponse.getHighlighting();        System.out.println(documentList);        System.out.println(maplist);        for(SolrDocument document : documentList){            String typeId = (String) document.getFieldValue("typeId");            String typeName = maplist.get(typeId).get("typeName").get(0);            results.get(index).setTypeName(typeName);            index++;        }        for(GoodsType type : results){            System.out.println(type);        }    }
原创粉丝点击