package com.shopizer.search.services;
import javax.inject.Inject;
import org.apache.log4j.Logger;
import com.shopizer.search.services.worker.KeywordIndexerImpl;
import com.shopizer.search.services.worker.ObjectIndexerImpl;
import com.shopizer.search.services.workflow.DeleteObjectWorkflow;
import com.shopizer.search.services.workflow.GetWorkflow;
import com.shopizer.search.services.workflow.IndexWorkflow;
import com.shopizer.search.services.workflow.SearchWorkflow;
import com.shopizer.search.utils.SearchClient;
/**
* This is the main class for indexing and searching services
* @author Carl Samson
*
*/
public class SearchService {
private static Logger log = Logger.getLogger(SearchService.class);
@Inject
private DeleteObjectWorkflow deleteWorkflow;
@Inject
private IndexWorkflow indexWorkflow;
@Inject
private GetWorkflow getWorkflow;
@Inject
private SearchWorkflow searchWorkflow;
@Inject
private ObjectIndexerImpl index;
@Inject
private KeywordIndexerImpl keyword;
@Inject
private SearchClient searchClient;
public void initService() {
log.debug("Initializing search service");
try {
index.init(searchClient);
keyword.init(searchClient);
} catch (Exception e) {
log.error("Cannot initialize SearchService correctly, will be initialized lazily",e);
}
}
public void deleteObject(String collection, String object, String id) throws Exception {
deleteWorkflow.deleteObject(collection, object, id);
}
public com.shopizer.search.services.GetResponse getObject(String collection, String object, String id) throws Exception {
return getWorkflow.getObject(collection,object,id);
}
/**
* Index a document
* @param json
* @param collection (name of the collection)
* Might be product_en or product_fr or any name of the index container
* @param object
* That corresponds to the name of the entity to be indexed as defined in the
* indice file (product.json). In this case it will be product
* @param id
*/
public void index(String json, String collection, String object) throws Exception {
indexWorkflow.index(json, collection, object);
}
public SearchResponse searchAutoComplete(String collection,String json,int size) throws Exception {
return searchWorkflow.searchAutocomplete(collection,json,size);
}
public SearchResponse search(SearchRequest request) throws Exception {
return searchWorkflow.search(request);
}
}