
com.jaeksoft.searchlib.report.ReportsManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of opensearchserver Show documentation
Show all versions of opensearchserver Show documentation
OpenSearchServer is a powerful, enterprise-class, search engine program. Using the web user interface,
the crawlers (web, file, database, ...) and the REST/RESTFul API you will be able to integrate quickly and
easily advanced full-text search capabilities in your application. OpenSearchServer runs on Windows and
Linux/Unix/BSD.
/**
* License Agreement for OpenSearchServer
*
* Copyright (C) 2012 Emmanuel Keller / Jaeksoft
*
* http://www.open-search-server.com
*
* This file is part of OpenSearchServer.
*
* OpenSearchServer is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenSearchServer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenSearchServer.
* If not, see .
**/
package com.jaeksoft.searchlib.report;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.jaeksoft.searchlib.Client;
import com.jaeksoft.searchlib.SearchLibException;
import com.jaeksoft.searchlib.analysis.LanguageEnum;
import com.jaeksoft.searchlib.config.Config;
import com.jaeksoft.searchlib.facet.Facet;
import com.jaeksoft.searchlib.facet.FacetField;
import com.jaeksoft.searchlib.facet.FacetList;
import com.jaeksoft.searchlib.index.IndexDocument;
import com.jaeksoft.searchlib.query.ParseException;
import com.jaeksoft.searchlib.request.SearchPatternRequest;
import com.jaeksoft.searchlib.result.AbstractResultSearch;
import com.jaeksoft.searchlib.util.FormatUtils.ThreadSafeDateFormat;
import com.jaeksoft.searchlib.util.FormatUtils.ThreadSafeSimpleDateFormat;
import com.jaeksoft.searchlib.util.IOUtils;
public class ReportsManager {
private Client client;
private Client reportsClient;
public ReportsManager(Config config, File directory)
throws SearchLibException {
this.client = (Client) config;
this.reportsClient = new Client(directory,
"/com/jaeksoft/searchlib/report_config.xml", true);
}
private class ReportFileFilter implements FilenameFilter {
private final String reportPrefix = "report." + client.getIndexName();
@Override
public boolean accept(File dir, String filename) {
return filename.startsWith(reportPrefix);
}
}
public File[] getReportsList() throws SearchLibException {
File logDirectory = client.getLogReportManager().getLogDirectory();
return logDirectory.listFiles(new ReportFileFilter());
}
public void updateReportItem(ReportItem reportItem)
throws SearchLibException {
try {
IndexDocument indexDocument = new IndexDocument();
reportItem.populate(indexDocument);
reportsClient.updateDocument(indexDocument);
} catch (MalformedURLException e) {
throw new SearchLibException(e);
} catch (IOException e) {
throw new SearchLibException(e);
}
}
public String[] generateReportItem(String reportLine) {
return reportLine.split("\\s+");
}
private SearchPatternRequest getNewSearchRequest(String defaultOperator,
int rows) throws SearchLibException {
SearchPatternRequest searchRequest = new SearchPatternRequest(
reportsClient);
searchRequest.setDefaultOperator(defaultOperator);
searchRequest.setRows(rows);
searchRequest.setPhraseSlop(2);
searchRequest.setStart(0);
searchRequest.addReturnField("keywords");
searchRequest.addReturnField("reportId");
searchRequest.addReturnField("keywordsExact");
searchRequest.addReturnField("datetime");
searchRequest.addReturnField("responseTime");
searchRequest.getFacetFieldList().put(
new FacetField("keywords", 1, false, false, null));
searchRequest.setLang(LanguageEnum.UNDEFINED);
return searchRequest;
}
private SearchPatternRequest addDateFilter(
SearchPatternRequest searchRequest, String startDate, String endDate)
throws ParseException {
StringBuilder addDateBuffer = new StringBuilder();
addDateBuffer.append(" ");
addDateBuffer.append("datetime:[");
addDateBuffer.append(startDate);
addDateBuffer.append(" TO ");
addDateBuffer.append(endDate);
addDateBuffer.append("]");
searchRequest.addFilter(addDateBuffer.toString(), false);
return searchRequest;
}
private SearchPatternRequest generateSearchRequest(String topKeywords,
String startDate, String endDate, boolean withResult, int rows)
throws ParseException, SearchLibException {
SearchPatternRequest searchRequest = getNewSearchRequest("OR", rows);
if (!withResult) {
StringBuilder addFilterBuffer = new StringBuilder();
addFilterBuffer.append(" ");
addFilterBuffer.append("documentsFound:" + 0);
searchRequest.addFilter(addFilterBuffer.toString(), false);
}
searchRequest = addDateFilter(searchRequest, startDate, endDate);
if (topKeywords != null && !topKeywords.equalsIgnoreCase("")) {
searchRequest.setPatternQuery("keywordsExact:($$)");
searchRequest.setQueryString(topKeywords);
} else
searchRequest.setEmptyReturnsAll(true);
return searchRequest;
}
private final static ThreadSafeDateFormat changeDateFormat = new ThreadSafeSimpleDateFormat(
"yyyyMMddhhmmss");
private final String modifyDate(Date date) throws java.text.ParseException {
return changeDateFormat.format(date);
}
public Facet getSearchReport(String topKeywords, Date startDate,
Date endDate, boolean withResult, int rows)
throws SearchLibException, ParseException {
SearchPatternRequest searchRequest;
String fromDate;
String dateTo;
try {
fromDate = startDate == null ? "00000000000000"
: modifyDate(startDate);
dateTo = endDate == null ? "99999999999999" : modifyDate(endDate);
searchRequest = generateSearchRequest(topKeywords, fromDate,
dateTo, withResult, rows);
AbstractResultSearch result = (AbstractResultSearch) reportsClient
.request(searchRequest);
FacetList facet = result.getFacetList();
return facet.getByField("keywords");
} catch (java.text.ParseException e) {
throw new SearchLibException(e);
}
}
public void reload(boolean optimize) throws SearchLibException {
if (optimize) {
reportsClient.reload();
reportsClient.getIndex().optimize();
}
}
public int loadReportFile(String filename)
throws UnsupportedEncodingException, IOException,
SearchLibException {
List fileList = new ArrayList();
int count = 0;
FileInputStream fstream = null;
DataInputStream in = null;
BufferedReader br = null;
InputStreamReader isr = null;
try {
File reportFile = new File(client.getLogReportManager()
.getLogDirectory(), filename);
fstream = new FileInputStream(reportFile);
in = new DataInputStream(fstream);
isr = new InputStreamReader(in);
br = new BufferedReader(isr);
String strLine;
while ((strLine = br.readLine()) != null) {
fileList.add(strLine);
if (fileList.size() >= 1000)
loadReportItems(fileList, reportFile);
count++;
}
if (fileList.size() != 0)
loadReportItems(fileList, reportFile);
in.close();
return count;
} finally {
IOUtils.close(br, in, isr, fstream);
}
}
public void loadReportItems(List fileList, File reportFile)
throws UnsupportedEncodingException, SearchLibException {
List reportItems = createIndexvalues(fileList, reportFile);
updateReportItems(reportItems);
fileList.clear();
}
private List createIndexvalues(List reportFileString,
File reportFile) throws UnsupportedEncodingException {
List listReportItem = new ArrayList();
int id = 1;
for (String reportList : reportFileString) {
String[] reportItems = generateReportItem(reportList);
ReportItem reportItem = new ReportItem();
reportItem.setReportId(reportFile.getName() + "_" + id);
reportItem.setDatetime(createDate(reportItems[0]));
reportItem.setKeywords(URLDecoder.decode(reportItems[1], "UTF-8"));
reportItem.setKeywordsExact(URLDecoder.decode(reportItems[1],
"UTF-8"));
reportItem.setResponseTime(reportItems[2]);
reportItem.setDocumentsFound(reportItems[3]);
listReportItem.add(reportItem);
id++;
}
return listReportItem;
}
public void updateReportItems(List listItem)
throws SearchLibException {
for (ReportItem reportItemList : listItem)
updateReportItem(reportItemList);
reload(true);
}
public String createDate(String date) {
String[] sDate = date.split("T");
String yyymmdd = sDate[0].replaceAll("\\-", "");
String hhmmss = sDate[1].substring(0, sDate[1].length() - 5);
hhmmss = hhmmss.replaceAll(":", "");
return yyymmdd + hhmmss;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy