`

solr 实例

    博客分类:
  • 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]);

            }

        }

    }

}

 

分享到:
评论

相关推荐

    搜索案例solr

    solr是一个企业级搜索应用服务器它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的... solr实例

    全文检索(solr)实例

    本实例将详细介绍如何在本地环境中部署并运行一个Solr实例。 **一、Solr概述** Apache Solr是基于Java开发的,能够处理大量数据的高性能搜索平台。它提供了分布式、可扩展、实时和近实时搜索功能。Solr的核心特性...

    drupal-solr:一个简单的 docker 容器,用于提供配置为与 Drupal 的 apachesolr 模块一起使用的 dev Solr 实例

    drupal-solr 一个简单的 Docker 容器,用于提供配置为与 Drupal 的 apachesolr 模块一起使用的 dev Solr 实例。入门: Solr 实例已经配置了必要的模式以与 Drupal 的 apachesolr 模块一起工作。 要开始使用 Solr ...

    solr教程+实例

    四、Solr实例应用 4.1 创建索引:通过Solr Admin界面或API创建索引,例如为一个博客网站创建文章索引。 4.2 搜索接口:使用HTTP GET请求发送查询,接收JSON或XML格式的搜索结果。 4.3 高级查询:使用函数查询、评分...

    Solr 4.0 源代码实例

    在Solr 4.0版本中,`solr.xml`是Solr的核心配置文件,它定义了Solr实例的基本设置,如数据目录、核心加载策略、请求处理器以及SolrCloud的相关配置。通过查看此文件的源代码,你可以了解如何配置多个Solr核心,如何...

    lucene solr框架代码实例(可直接运行)

    在提供的压缩包文件"Solr_01"中,包含了可直接运行的Solr实例,这将帮助我们快速上手并理解Solr的工作原理。通过运行这些示例,我们可以学习如何创建索引、执行查询、管理索引库以及配置分布式搜索。 在实际开发中...

    solr(solr-9.0.0.tgz)

    1. **bin** 文件夹:这个目录下有启动和管理Solr服务器的各种脚本,如`solr`命令行工具,可以用于启动、停止和管理Solr实例。 2. **server** 文件夹:这是Solr的核心所在,包括了Jetty服务器(默认的嵌入式HTTP...

    Apache Solr(solr-8.11.1.tgz)

    4. **example 目录**:提供了一个预配置的Solr实例,用于快速入门和测试。它包括一个默认的配置集,以及一个简单的数据导入处理程序(DIH)示例,帮助开发者了解如何设置和使用Solr。 5. **docs 目录**:包含了Solr...

    solr入门java工程

    Java客户端是与Solr通信的一种常见方式,它允许开发者通过编写Java代码来执行索引操作、查询、更新和管理Solr实例。在“solr-example”这个压缩包中,可能包含了一个简单的Java示例项目,展示了如何使用SolrJ,这是...

    Apache Solr(solr-8.11.1.zip)

    10. **JMX监控**:Solr支持Java Management Extensions (JMX)监控,允许管理员监控和管理Solr实例的运行状态,包括性能指标和配置变更。 11. **JSON支持**:Solr 8.x增强了对JSON的支持,允许用户使用JSON格式进行...

    solr-7.4.0.zip

    4. `example`目录:提供了一个简单的Solr示例,包括一个预配置的Solr实例,可以快速启动并开始使用Solr。 5. `docs`目录:包含了Solr的文档,包括用户手册、API参考等。 6. `contrib`目录:包含了一些社区贡献的模块...

    solr文档.docx

    例如,假设存在三个Solr实例(solr1、solr2、solr3),每个Solr实例拥有三个Core,这样就构成了一个SolrCloud环境。 **逻辑结构** - **Collection**: 在SolrCloud中,一个Collection是一个逻辑意义上的完整索引...

    Solr分词项目工程实例

    5. 部署与维护:将Solr实例部署到服务器,并定期进行索引更新和优化。 四、Solr分词工程实例中的"data"文件 在本实例中,"data"文件可能是用于导入Solr的数据源,可能包含文档内容、元数据等信息。这些数据将通过...

    最新版windows solr-8.8.2.zip

    3. **配置文件**:压缩包中的solr-8.8.2目录可能包含`server/solr/configsets`,这是预定义的配置集,如`basic_configs`,用于快速启动Solr实例。 4. **Schema设计**:Solr使用Schema.xml文件来定义索引字段,包括...

    最新版linux solr-8.10.0.tgz

    1. **核心组件**:每个Solr实例由一个或多个“集合”(Collections)组成,集合是逻辑上的索引单元。每个集合可以由多个分片(Shards)构成,以实现水平扩展。SolrCloud模式下,集合和分片能够进行分布式管理和自动...

    quick-list:用于连接到 Solr 实例的概念证明 NodeJS 应用程序

    快速列表简单的概念验证 NodeJS 应用程序,用于连接和搜索项目的 solr 实例。 这些项目有一个name 、一个from值和一个可选的to值,它们都是可搜索的。要求这个 NodeJS 应用程序需要一个正在运行的 Solr 实例才能运行...

    solr-4.10.3.rar

    它允许Solr实例在Hadoop的Zookeeper协调下形成集群,实现数据的分布存储和处理,支持自动故障转移和负载均衡。 2. **索引与查询**:Solr的核心功能是对文档进行索引,并提供高效的查询服务。索引过程包括分析、字段...

    solr(solr-9.0.0-src.tgz)源码

    - `example`: 示例配置和启动脚本,帮助快速启动和测试Solr实例。 - `lucene`: 内含Lucene库源码,Solr的核心搜索引擎库。 4. **关键类与接口** - `SolrCore`: 代表Solr的单一索引实例,包含了索引、查询和其他...

    solr的学习

    - **SolrCore**:Solr 实例的核心,每个 SolrCore 提供单独的搜索和索引服务。 - **创建 SolrCore** 1. 在 Solr 解压包的 example\solr 文件夹下创建 SolrHome。 2. 复制 solr-4.10.3\example\solr 文件夹到本地...

    solr安装和介绍

    SolrCore 目录中包含了运行 Solr 实例所有的配置文件和数据文件,Solr 实例即为 SolrCore。 1. **创建 SolrHome**:复制 server-》solr 文件到新建的 solrhome 下。 2. **创建 SolrCore**:在 SolrHome 目录下复制...

Global site tag (gtag.js) - Google Analytics