• solr的java调用


    SolrJ的使用
    SolrJ覆盖了solr的全部功能,下面将自己在实际开发中所使用的程序粘贴出来并适当加以解释,由于本人比较菜,代码书写不是那么的精练,还请见谅。

    1、 创建solrserver对象:
    try {
    solr = new CommonsHttpSolrServer("http://localhost:8983/solr");
    solr.setConnectionTimeout(100);
    solr.setDefaultMaxConnectionsPerHost(100);
    solr.setMaxTotalConnections(100);
    } catch (Exception e) {
    System.out.println("请检查tomcat服务器或端口是否开启!");
    e.printStackTrace();
    }

    2、 添加索引
    Collection docs = new ArrayList ();
    for (int i = 0; i < list.size(); i++) {
    Item item = list.get(i);
    //设置每个字段不得为空,可以在提交索引前进行检查
    if (CheckItem(item)) {
    SolrInputDocument doc = new SolrInputDocument();
    //在这里请注意date的格式,要进行适当的转化,上文已提到
    doc.addField("id", item.getId());
    …………
    docs.add(doc);
    }
    }

    try {
    solr.add(docs);
    //对索引进行优化
    solr.optimize();
    solr.commit();
    } catch (Exception e) {
    e.printStackTrace();
    }
    3、 使用bean对象添加索引
    创建一个对应于solr索引的类别:
    public class Item {
    @Field
    private String id;
    …………
    public void setId(String id) {
    this.id = id;
    }
    public String getId() {
    return id;
    }
    …………
    public Item(){
    }
    }

    使用数据创建bean对象列表,
    try {
    solr.addBeans(beansList);
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    solr.optimize();
    solr.commit();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    索引提交完毕。

    4、 删除索引
    据查询结果删除:
    try {
    //删除所有的索引
    solr.deleteByQuery("*:*");
    solr.commit();
    } catch (Exception e) {
    e.printStackTrace();
    }

    根据索引号删除索引:
    try {
    solr.deleteById(ids);
    solr.commit();
    } catch (Exception e) {
    e.printStackTrace();
    }

    5、 查询
    SolrJ提供的查询功能比较强大,可以进行结果中查询、范围查询、排序等。
    下面是笔者封装的一个查询函数:

    public static QueryResponse Search(String[] field, String[] key, int start,
    int count, String[] sortfield, Boolean[] flag, Boolean hightlight) {
    //检测输入是否合法
    if (null == field || null == key || field.length != key.length) {
    return null;
    }
    if (null == sortfield || null == flag || sortfield.length != flag.length) {
    return null;
    }

    SolrQuery query = null;
    try {
    //初始化查询对象
    query = new SolrQuery(field[0] + ":" + key[0]);
    for (int i = 0; i < field.length; i++) {
    query.addFilterQuery(field[i] + ":" + key[i]);
    }
    //设置起始位置与返回结果数
    query.setStart(start);
    query.setRows(count);
    //设置排序
    for(int i=0; i
    if (flag[i]) {
    query.addSortField(sortfield[i], SolrQuery.ORDER.asc);
    } else {
    query.addSortField(sortfield[i], SolrQuery.ORDER.desc);
    }
    }
    //设置高亮
    if (null != hightlight) {
    query.setHighlight(true); // 开启高亮组件
    query.addHighlightField("title");// 高亮字段
    query.setHighlightSimplePre("");// 标记
    query.setHighlightSimplePost("
    ");
    query.setHighlightSnippets(1);//结果分片数,默认为1
    query.setHighlightFragsize(1000);//每个分片的最大长度,默认为100
    }
    } catch (Exception e) {
    e.printStackTrace();
    }

    QueryResponse rsp = null;
    try {
    rsp = solr.query(query);
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    //返回查询结果
    return rsp;
    }
    补充一下范围查询的格式:[star t TO end],start与end是相应数据格式的值的字符串形式,"TO" 一定要保持大写!

  • 相关阅读:
    MyCat简介+Mybatis实现多租户(链接)
    mybatis的sql执行过程底层源码分析和缓存原理分析
    推荐算法数据集
    CentOS系统初始化
    NAT
    VRRP
    BGP协议的原理及应用
    ospf协议的重分发
    静态路由的原理与配置、动态路由
    OSPF (企业内部使用的动态路由协议)
  • 原文地址:https://www.cnblogs.com/powerxu/p/2518709.html
Copyright © 2020-2023  润新知