package org.weiboad.ragnar.server.search;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.weiboad.ragnar.server.config.FieryConfig;
import org.weiboad.ragnar.server.data.MetaLog;
import org.weiboad.ragnar.server.data.ResponseJson;
import org.weiboad.ragnar.server.util.DateTimeHelper;
import java.util.Map;
@Component
@Scope("singleton")
public class IndexService {
private Logger log;
@Autowired
private IndexSearchSharderManager searchsharderManager;
@Autowired
private IndexWriterShaderManager writerSharderManager;
@Autowired
private FieryConfig fieryConfig;
//init
public IndexService() {
log = LoggerFactory.getLogger(IndexService.class);
log.info("Init the Index Service");
}
public boolean insertProcessQueue(MetaLog metalog) {
long shardtime = DateTimeHelper.getTimesMorning(Math.round(metalog.getTime()));
if (shardtime > DateTimeHelper.getBeforeDay(fieryConfig.getKeepdataday()) && shardtime <= DateTimeHelper.getCurrentTime()) {
return writerSharderManager.insertProcessQueue(Long.toString(shardtime), metalog);
} else {
return false;
}
}
public void addIndex(String dbname, MetaLog metalog) {
writerSharderManager.addIndex(dbname, metalog);
}
public ResponseJson searchIndex(Long timestamp, String field, String keyword, int start, int limit) {
//log.info("search timestamp:" + timestamp);
return searchsharderManager.searchIndex(timestamp, field, keyword, start, limit);
}
public ResponseJson searchByQuery(Long timestamp, Query query, int start, int limit, Sort sort) {
return searchsharderManager.searchByQuery(timestamp, query, start, limit, sort);
}
public ResponseJson searchByGroup(Long timestamp, int offset, int limit) {
return searchsharderManager.searchByGroup(timestamp, offset, limit);
}
public Map<String, Map<String, String>> getWriteIndexInfo() {
return writerSharderManager.getWriteIndexInfo();
}
public Map<String, Map<String, String>> getSearchIndexInfo() {
return searchsharderManager.getSearchIndexInfo();
}
public int getIndexedDocCount() {
return searchsharderManager.getIndexedDocCount();
}
}