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实例
drupal-solr 一个简单的 Docker 容器,用于提供配置为与 Drupal 的 apachesolr 模块一起使用的 dev Solr 实例。入门: Solr 实例已经配置了必要的模式以与 Drupal 的 apachesolr 模块一起工作。 要开始使用 Solr ...
快速列表简单的概念验证 NodeJS 应用程序,用于连接和搜索项目的 solr 实例。 这些项目有一个name 、一个from值和一个可选的to值,它们都是可搜索的。要求这个 NodeJS 应用程序需要一个正在运行的 Solr 实例才能运行...
solr教程+实例
相反,它管理在单个 Solr 实例中运行的所有内核。 每个顶级 Solr 实例只存在一个 CoreAdminHandler。但是,如果您想要在 Solr 实例中使用多个CoreAdminHandler插件怎么办? 这个插件可以提供帮助。安装将放入shared...
萨拉皮斯 ... ######Options: --solr-host 要连接的 Solr 实例的主机地址。 [必需的] --solr-port 要连接的 Solr 实例的端口。 [必需的] --solr-core 要连接的 Solr 实例的核心。 --solr-allow 允许在 S
Solr分词项目工程实例 Solr分词项目工程实例 Solr分词项目工程实例 Solr分词项目工程实例
分词器和配置已经弄好了,只要按照网页说明把solr_home和solr_data放到D盘根目录下就可以了,solr放到tomcat下面。
日志是server / logs目录下的全局日志,在同一台计算机上启动多个Solr实例时会导致问题; 云示例做了认真的变通办法以使其中一些 核心是在服务器下的秘密位置中创建的 配置集很难找到,并且不清楚如何修改它们 这两...
这是Allegro CL的Solr绑定。... 要访问服务器,您需要使用端点url创建一个solr实例。 例如,如果服务器在localhost:8983上运行,则可以说: (defvar *solr* (make-instance 'solr :uri "http://lo
它创建一个 solr 实例并配置它以在 IspConfig 环境中使用 == 参数: [ instance_name ] solr 实例的名称。 实例将被称为 solr-$instance_name。 如果不存在将被使用 [ app_server ] 用于部署 solr webapp 的应用...
solr的优化实例1 用户开发人员参考,tomcat6 solr3.5架构使用
JAVA+Solr分词项目工程实例源代码学习
这不是多核配置:一个项目——一个与 Jetty 一起运行的 Solr 实例。安装 Java yum install java-1.7.0-openjdk-devel安装 Solr cd /usr/sharewget ...
列出在Solr上配置的所有字段并检查其属性核心浏览器:列出Solr实例上托管的所有核心并检查其属性核心操作:创建,删除,重命名,交换,重新加载核心系统浏览器:查看所有系统属性配置文件浏览器:列出所有Solr配置...
附件包含100个以上示例,包括solr.xml、solrconfig.xml等在Jetty、Tomcat等应用服务器下的详细配置。
Solr搜索SolrSearch是一个简单的NodeJs文件应用程序,它充当Apache Solr实例的前端。 这也是的前端入门先决条件SolrSearch假定您已安装NodeJ以及已配置的带有要搜索的集合的Apache Solr实例。正在安装首先,克隆Solr...
安装探针搜索器的说明使用上传器 biomartProbes 从 biomart 获取... 2.1 解压 solr 服务器 > tar xvfz probe_solr.tgz 2.2 运行服务器 > cd probe_solr > java -jar -Xmx500m start.jar 这个 solr 实例已设置为在端口
JAVA+Solr分词项目工程实例Java实用源码整理learns
JAVA+Solr分词项目工程实例Java源码 解压密码:https://hao.360.cn/?src=lm&ls=n527fd66b97