solr 实例

package com.chengshu.logger.service;

import java.util.ArrayList;

import java.util.Collection;

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.impl.HttpSolrServer;

import org.apache.solr.client.solrj.request.UpdateRequest;

import org.apache.solr.client.solrj.response.FacetField;

import org.apache.solr.client.solrj.response.FacetField.Count;

import org.apache.solr.client.solrj.response.QueryResponse;

import org.apache.solr.client.solrj.response.UpdateResponse;

import org.apache.solr.common.SolrDocument;

import org.apache.solr.common.SolrDocumentList;

import org.apache.solr.common.SolrInputDocument;

import com.infomorrow.model.logger.Collect;

public class SolrCollect {

    private static String tomcat_solr = "http://bd-kafak202-34:8983/solr/collectdata_shard3_replica1";

    private static HttpSolrServer solr = null;

    // 初始化solr服务

    public static void initialize() {

        try {

            solr = new HttpSolrServer(tomcat_solr);

            solr.setConnectionTimeout(100);

            solr.setDefaultMaxConnectionsPerHost(100);

            solr.setMaxTotalConnections(100);

            solr.setAllowCompression(true);

        } catch (Exception e) {

            System.out.println("请检查tomcat服务器或端口是否开启!");

            e.printStackTrace();

        }

    }

    // 检测collect是否有字段为空

    public static Boolean CheckGood(Collect collect) {

        if (null == collect.getCrawl_token()) {

            return false;

        } else if (null == collect.getCreate_time()) {

            return false;

        } else if (null == collect.getDb_save_time()) {

            return false;

        } else if (null == collect.getIP()) {

            return false;

        } else if (null == collect.getLevel()) {

            return false;

        } else if (null == collect.getMessage()) {

            return false;

        } else if (null == collect.getNote()) {

            return false;

        } else if (null == collect.getSender()) {

            return false;

        } else if (null == collect.getStack_trace()) {

            return false;

        } else if (null == collect.getWebsite()) {

            return false;

        } else {

            return true;

        }

    }

    // 将数据库中的时间转换为solr可接受的格式

    public static String Convertime(String time) {

        time = time.replace(" ", "T");

        time = time + "00Z";

        return time;

    }

    // 添加记录

    public static void addCollect(Collect collect) {

        Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();

        if (CheckGood(collect)) {

            SolrInputDocument doc = new SolrInputDocument();

            doc.addField("_id", UUID.randomUUID().toString());

            doc.addField("crawl_token", collect.getCrawl_token());

            doc.addField("level", collect.getLevel());

            doc.addField("create_time", collect.getCreate_time());

            doc.addField("message", collect.getMessage());

            doc.addField("website", collect.getWebsite());

            doc.addField("sender", collect.getSender());

            doc.addField("stack_trace", collect.getStack_trace());

            doc.addField("note", collect.getNote());

            doc.addField("ip", collect.getIP());

            doc.addField("db_save_time", collect.getDb_save_time());

            docs.add(doc);

        }

        try {

            // solr.add(docs);

            // solr.optimize();

            // solr.commit();

            UpdateRequest req = new UpdateRequest();

            req.setAction(UpdateRequest.ACTION.COMMIT, false, false);

            req.add(docs);

            UpdateResponse rsp = req.process(solr);

            System.out.println(rsp.getStatus());

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    // 添加beans到索引

    public static void addGoodsBeans(List<Collect> beansList) {

        try {

            solr.addBeans(beansList);

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            try {

                solr.optimize();

                solr.commit();

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    }

    // 删除所有索引

    public static void DeleteAllIndex() {

        try {

            solr.deleteByQuery("_id:1*");

            solr.commit();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    // 根据ID删除索引

    public static void DeleteIndex(List<String> ids) {

        try {

            solr.deleteById(ids);

            solr.commit();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    // 进行搜索,

    // field、key为查询(值或范围均可),

    // start为起始查询位置,row为返回结果个数,

    // sortfield为排序字段,

    // flag中true升序、false降序,

    // hightlight选择是否高亮返回,高亮字段为title

    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 {

            for (int i = 0; i < field.length; i++) {

                if (query == null) {

                    query = new SolrQuery(field[i] + ":" + key[i]);

                } else {

                    query.addFilterQuery(field[i] + ":" + key[i]);

                }

            }

            query.setStart(start);

            query.setRows(count);

            for (int i = 0; i < sortfield.length; i++) {

                if (flag[i]) {

                    query.addSort(sortfield[i], SolrQuery.ORDER.asc);

                } else {

                    query.addSort(sortfield[i], SolrQuery.ORDER.desc);

                }

            }

            if (null != hightlight) {

                query.setHighlight(true); // 开启高亮组件

                query.addHighlightField("crawl_token");// 高亮字段

                query.setHighlightSimplePre("<font color=\"red\">");// 标记

                query.setHighlightSimplePost("</font>");

                query.setHighlightSnippets(1);

                query.setHighlightFragsize(1000);

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

        System.out.println(query.toString());

        QueryResponse rsp = null;

        try {

            rsp = solr.query(query);

        } catch (Exception e) {

            e.printStackTrace();

            return null;

        }

        return rsp;

    }

    // 自动补全

    public static String[] autoComplete(String prefix, int min) {

        String words[] = null;

        StringBuffer sb = new StringBuffer("");

        SolrQuery query = new SolrQuery("*.*");

        QueryResponse rsp = new QueryResponse();

        try {

            query.setFacet(true);

            query.setQuery("*:*");

            query.setFacetPrefix(prefix);

            query.addFacetField("crawl_token");

            rsp = solr.query(query);

        } catch (Exception e) {

            e.printStackTrace();

            return null;

        }

        if (null != rsp) {

            FacetField ff = rsp.getFacetField("crawl_token");

            List<Count> countList = ff.getValues();

            if (null == countList) {

                return null;

            }

            for (int i = 0; i < countList.size(); i++) {

                String tmp[] = countList.get(i).toString().split(" ");

                if (tmp[0].length() < 2) {

                    continue;

                }

                sb.append(tmp[0] + " ");

                min--;

                if (min == 0) {

                    break;

                }

            }

            words = sb.toString().split(" ");

        } else {

            return null;

        }

        return words;

    }

    

    public static void main(String[] args) {

        initialize();

        // 添加索引

        // Collect collect = new Collect();

        // collect.setCrawl_token("me_aa");

        // collect.setCreate_time(System.currentTimeMillis());

        // collect.setDb_save_time(System.currentTimeMillis());

        // collect.setIP("127.0.0.1");

        // collect.setLevel("Info");

        // collect.setMessage("message");

        // collect.setNote("note");

        // collect.setSender("APP");

        // collect.setStack_trace("exception ....");

        // collect.setWebsite("chinamobile");

        // addCollect(collect);

        // 删除索引

        // DeleteAllIndex();

        // 查询索引

        String[] field = { "crawl_token", "level" };

        String[] key = { "*", "*" };

        int start = 0;

        int count = 15;

        String[] sortfield = { "create_time" };

        Boolean flag[] = { false };

        Boolean hightlight = true;

        QueryResponse res = Search(field, key, start, count, sortfield, flag, hightlight);

        SolrDocumentList list = res.getResults();

        for(int i=0;i<list.size();i++){

            SolrDocument document = list.get(i);

            String token = (String)document.getFieldValue("crawl_token");

            String level = (String)document.getFieldValue("level");

            System.out.println(token+"    "+level);

        }

        

        // 自动补全

        String words[] = autoComplete("me", 10);

        if (null != words) {

            System.out.println(words.length);

            for (int i = 0; i < words.length; i++) {

                System.out.println(words[i]);

            }

        }

    }

}

猜你喜欢

转载自e-e.iteye.com/blog/2320151