chriszg 发表于 2018-11-1 14:01:06

大数据实战之环境搭建(七)

namespace SolrCURDDemo  
{
  
using SolrNet;
  
using Microsoft.Practices.ServiceLocation;
  
using System.Reflection;
  
using SolrNet.Commands.Parameters;
  
using System.Configuration;

  
public>  
{
  
private static bool isRegister;
  
private static SolrHelper solrHelper = new SolrHelper();
  
private SolrHelper()
  
{ }
  
private static int MaxQueryCount
  
{
  
get
  
{
  
return int.Parse(ConfigurationManager.AppSettings["MaxQueryCount"].ToString());
  
}
  
}
  
public static SolrHelper GetInstance()
  
{
  
if (!isRegister)
  
{
  
RegisterSolrInstance();
  
isRegister = true;
  
}
  
return solrHelper;
  
}
  
private static void RegisterSolrInstance()
  
{
  
string path = AppDomain.CurrentDomain.BaseDirectory + @"\SolrConfig\SolrConfig.xml";
  
SolrCollection solrCollection = Deserialize(path);
  
Type startUpType = typeof(Startup);
  
foreach (SolrConfigs solrConfig in solrCollection.SolrConfigs)
  
{
  
foreach (SchemaInfo schema in solrConfig.Schemas)
  
{
  
MethodInfo method = startUpType.GetMethod("Init", new Type[] { typeof(string) })
  
.MakeGenericMethod(Type.GetType(schema.EntityType));
  
method.Invoke(null, new object[] { solrConfig.BaseAddress + schema.ServiceName });
  
}
  
}
  
}

  
private static T Deserialize(string path) where T :>  
{
  
XmlReader xmlReader = XmlReader.Create(path);
  
XmlSerializer xmlSer = new XmlSerializer(typeof(SolrCollection));
  
object deSerializeObj = xmlSer.Deserialize(xmlReader);
  
xmlReader.Close();
  
return deSerializeObj as T;
  
}
  
private ISolrOperations GetSolrOperation()
  
{
  
return ServiceLocator.Current.GetInstance();
  
}
  
#region solr operations
  
#region query
  
public List QueryByFilter(string filter)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
SolrQueryResults result = solrOperation.Query(filter);
  
return result.ToList();
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
public List QueryByFilter(ISolrQuery solrQuery)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
SolrQueryResults result = solrOperation.Query(solrQuery);
  
return result.ToList();
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
public List QueryByFilter(string filter, Dictionary sortDictionary)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
List sortOrderList = new List();
  
foreach (KeyValuePair sortPair in sortDictionary)
  
{
  
SortOrder sortOrder = new SortOrder(sortPair.Key, (Order)Enum.Parse(typeof(Order), sortPair.Value));
  
sortOrderList.Add(sortOrder);
  
}
  
SolrQueryResults result = solrOperation.Query(filter, sortOrderList);
  
return result.ToList();
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
public List QueryByFilter(ISolrQuery solrQuery, Dictionary sortDictionary)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
List sortOrderList = new List();
  
foreach (KeyValuePair sortPair in sortDictionary)
  
{
  
SortOrder sortOrder = new SortOrder(sortPair.Key, (Order)Enum.Parse(typeof(Order), sortPair.Value));
  
sortOrderList.Add(sortOrder);
  
}
  
SolrQueryResults result = solrOperation.Query(solrQuery, sortOrderList);
  
return result.ToList();
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
public List QueryByFilter(string filter, int pageIndex, int pageSize)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
QueryOptions queryOptions = new QueryOptions();
  
queryOptions.Start = pageIndex;
  
queryOptions.Rows = pageSize;
  
if (pageSize > MaxQueryCount)
  
{
  
queryOptions.Rows = MaxQueryCount;
  
}
  
SolrQueryResults result = solrOperation.Query(filter, queryOptions);
  
return result.ToList();
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
public List QueryByFilter(ISolrQuery solrQuery, int pageIndex, int pageSize)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
QueryOptions queryOptions = new QueryOptions();
  
queryOptions.Start = pageIndex;
  
queryOptions.Rows = pageSize;
  
if (pageSize > MaxQueryCount)
  
{
  
queryOptions.Rows = MaxQueryCount;
  
}
  
SolrQueryResults result = solrOperation.Query(solrQuery, queryOptions);
  
return result.ToList();
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
#endregion
  
#region add
  
public int AddEntity(T entity)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
solrOperation.Add(entity);
  
solrOperation.Commit();
  
return 1;
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
public int AddEntityList(List entityList)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
solrOperation.AddRange(entityList);
  
solrOperation.Commit();
  
return 1;
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
#endregion
  
#region delete
  
public int DeleteByEntity(T entity)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
solrOperation.Delete(entity);
  
return 1;
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
public int DeleteByKey(string key)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
solrOperation.Delete(key);
  
return 1;
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
public int DeleteByEntityList(List entityList)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
solrOperation.Delete(entityList);
  
return 1;
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
public int DeleteByKeyList(List keyList)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
solrOperation.Delete(keyList);
  
return 1;
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
public int DeleteByFilter(ISolrQuery query)
  
{
  
try
  
{
  
ISolrOperations solrOperation = GetSolrOperation();
  
solrOperation.Delete(query);
  
return 1;
  
}
  
catch (Exception ex)
  
{
  
throw ex;
  
}
  
}
  
#endregion
  
#endregion
  
}
  
}


页: [1]
查看完整版本: 大数据实战之环境搭建(七)