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是一个企业级搜索应用服务器它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的... solr实例
本实例将详细介绍如何在本地环境中部署并运行一个Solr实例。 **一、Solr概述** Apache Solr是基于Java开发的,能够处理大量数据的高性能搜索平台。它提供了分布式、可扩展、实时和近实时搜索功能。Solr的核心特性...
drupal-solr 一个简单的 Docker 容器,用于提供配置为与 Drupal 的 apachesolr 模块一起使用的 dev Solr 实例。入门: Solr 实例已经配置了必要的模式以与 Drupal 的 apachesolr 模块一起工作。 要开始使用 Solr ...
四、Solr实例应用 4.1 创建索引:通过Solr Admin界面或API创建索引,例如为一个博客网站创建文章索引。 4.2 搜索接口:使用HTTP GET请求发送查询,接收JSON或XML格式的搜索结果。 4.3 高级查询:使用函数查询、评分...
在Solr 4.0版本中,`solr.xml`是Solr的核心配置文件,它定义了Solr实例的基本设置,如数据目录、核心加载策略、请求处理器以及SolrCloud的相关配置。通过查看此文件的源代码,你可以了解如何配置多个Solr核心,如何...
在提供的压缩包文件"Solr_01"中,包含了可直接运行的Solr实例,这将帮助我们快速上手并理解Solr的工作原理。通过运行这些示例,我们可以学习如何创建索引、执行查询、管理索引库以及配置分布式搜索。 在实际开发中...
1. **bin** 文件夹:这个目录下有启动和管理Solr服务器的各种脚本,如`solr`命令行工具,可以用于启动、停止和管理Solr实例。 2. **server** 文件夹:这是Solr的核心所在,包括了Jetty服务器(默认的嵌入式HTTP...
4. **example 目录**:提供了一个预配置的Solr实例,用于快速入门和测试。它包括一个默认的配置集,以及一个简单的数据导入处理程序(DIH)示例,帮助开发者了解如何设置和使用Solr。 5. **docs 目录**:包含了Solr...
Java客户端是与Solr通信的一种常见方式,它允许开发者通过编写Java代码来执行索引操作、查询、更新和管理Solr实例。在“solr-example”这个压缩包中,可能包含了一个简单的Java示例项目,展示了如何使用SolrJ,这是...
10. **JMX监控**:Solr支持Java Management Extensions (JMX)监控,允许管理员监控和管理Solr实例的运行状态,包括性能指标和配置变更。 11. **JSON支持**:Solr 8.x增强了对JSON的支持,允许用户使用JSON格式进行...
4. `example`目录:提供了一个简单的Solr示例,包括一个预配置的Solr实例,可以快速启动并开始使用Solr。 5. `docs`目录:包含了Solr的文档,包括用户手册、API参考等。 6. `contrib`目录:包含了一些社区贡献的模块...
例如,假设存在三个Solr实例(solr1、solr2、solr3),每个Solr实例拥有三个Core,这样就构成了一个SolrCloud环境。 **逻辑结构** - **Collection**: 在SolrCloud中,一个Collection是一个逻辑意义上的完整索引...
5. 部署与维护:将Solr实例部署到服务器,并定期进行索引更新和优化。 四、Solr分词工程实例中的"data"文件 在本实例中,"data"文件可能是用于导入Solr的数据源,可能包含文档内容、元数据等信息。这些数据将通过...
3. **配置文件**:压缩包中的solr-8.8.2目录可能包含`server/solr/configsets`,这是预定义的配置集,如`basic_configs`,用于快速启动Solr实例。 4. **Schema设计**:Solr使用Schema.xml文件来定义索引字段,包括...
1. **核心组件**:每个Solr实例由一个或多个“集合”(Collections)组成,集合是逻辑上的索引单元。每个集合可以由多个分片(Shards)构成,以实现水平扩展。SolrCloud模式下,集合和分片能够进行分布式管理和自动...
快速列表简单的概念验证 NodeJS 应用程序,用于连接和搜索项目的 solr 实例。 这些项目有一个name 、一个from值和一个可选的to值,它们都是可搜索的。要求这个 NodeJS 应用程序需要一个正在运行的 Solr 实例才能运行...
它允许Solr实例在Hadoop的Zookeeper协调下形成集群,实现数据的分布存储和处理,支持自动故障转移和负载均衡。 2. **索引与查询**:Solr的核心功能是对文档进行索引,并提供高效的查询服务。索引过程包括分析、字段...
- `example`: 示例配置和启动脚本,帮助快速启动和测试Solr实例。 - `lucene`: 内含Lucene库源码,Solr的核心搜索引擎库。 4. **关键类与接口** - `SolrCore`: 代表Solr的单一索引实例,包含了索引、查询和其他...
- **SolrCore**:Solr 实例的核心,每个 SolrCore 提供单独的搜索和索引服务。 - **创建 SolrCore** 1. 在 Solr 解压包的 example\solr 文件夹下创建 SolrHome。 2. 复制 solr-4.10.3\example\solr 文件夹到本地...
SolrCore 目录中包含了运行 Solr 实例所有的配置文件和数据文件,Solr 实例即为 SolrCore。 1. **创建 SolrHome**:复制 server-》solr 文件到新建的 solrhome 下。 2. **创建 SolrCore**:在 SolrHome 目录下复制...