//根据id添加或者修改索引 public void InsertOrUpdate <T>(T model) { var doc = LuceneTool.CreateDoc(model); var term = new Term("Id", doc.Get("Id")); LuceneTool.GetIndexWriter(indexName).UpdateDocument(term, doc); }
//批量添加索引 public void InsertMany <T>(IEnumerable <T> list) { foreach (var item in list) { var doc = LuceneTool.CreateDoc(item); LuceneTool.GetIndexWriter(indexName).AddDocument(doc); } }
//加入其它索引 public void AppendIndexs(params string[] indexs) { foreach (var item in indexs) { Directory dir = LuceneTool.GetDirectory(item); LuceneTool.GetIndexWriter(indexName).AddIndexesNoOptimize(dir); } }
//根据ids批量发删除数据 public void DeleteByIds(IEnumerable <object> ids) { foreach (var id in ids) { Term term = new Term("Id", id.ToString()); LuceneTool.GetIndexWriter(indexName).DeleteDocuments(term); } }
//批量根据id添加或者修改索引 public void InsertOrUpdateMany <T>(IEnumerable <T> list) { foreach (var item in list) { var doc = LuceneTool.CreateDoc(item); var term = new Term("Id", doc.Get("Id")); LuceneTool.GetIndexWriter(indexName).UpdateDocument(term, doc); } }
public LuceneMultiConnection(params string[] indexNames) { readers = new IndexReader[indexNames.Length]; for (int i = 0; i < indexNames.Length; i++) { readers[i] = LuceneTool.GetIndexReader(indexNames[i]); } multiReader = new MultiReader(readers, false); //不关闭Readers indexSearcher = new IndexSearcher(multiReader); }
//公共提交方法 private void Save() { try { LuceneTool.GetSemaphore(indexName).Wait(); LuceneTool.RecoveryOldIndexReader(indexName); //回收旧的IndexReader LuceneTool.GetIndexWriter(indexName).Commit(); } finally { LuceneTool.GetSemaphore(indexName).Release(); } }
//读取doc文档 public static IEnumerable <T> ReadModels <T>(Searcher indexSearcher, TopDocs topDocs, string returnFields = null) where T : class, new() { if (topDocs.TotalHits == 0) { yield break; } foreach (var scoreDoc in topDocs.ScoreDocs) { Document doc; if (returnFields == null) { doc = indexSearcher.Doc(scoreDoc.Doc); } else { string[] fieldArr = returnFields.Split(','); MapFieldSelector field = new MapFieldSelector(fieldArr);//指定返回列 doc = indexSearcher.Doc(scoreDoc.Doc, field); } yield return(LuceneTool.CreateModel <T>(doc)); } }
//读取doc文档 public static IEnumerable <T> ReadModels <T>(Searcher indexSearcher, TopDocs topDocs, int skip, string returnFields = null) where T : class, new() { if (skip >= topDocs.TotalHits) { yield break; } for (int i = skip; i < topDocs.ScoreDocs.Length; i++) { Document doc; if (returnFields == null) { doc = indexSearcher.Doc(topDocs.ScoreDocs[i].Doc); } else { string[] fieldArr = returnFields.Split(','); MapFieldSelector field = new MapFieldSelector(fieldArr);//指定返回列 doc = indexSearcher.Doc(topDocs.ScoreDocs[i].Doc, field); } yield return(LuceneTool.CreateModel <T>(doc)); } }
//优化索引 public void Optimize() { LuceneTool.GetIndexWriter(indexName).Optimize(); }
//根据Terms删除 public void Delete(params Term[] terms) { LuceneTool.GetIndexWriter(indexName).DeleteDocuments(terms); }
//根据Term删除 public void Delete(Term term) { LuceneTool.GetIndexWriter(indexName).DeleteDocuments(term); }
//根据Querys删除 public void Delete(params Query[] queries) { LuceneTool.GetIndexWriter(indexName).DeleteDocuments(queries); }
//根据Query删除 public void Delete(Query q) { LuceneTool.GetIndexWriter(indexName).DeleteDocuments(q); }
//根据字段获取数据 public IEnumerable <T> GetByField <T>(string fieldName, string value, string returnFields = null) where T : class, new() { return(LuceneTool.GetByField <T>(indexSearcher, fieldName, value, returnFields)); }
//删除所有数据 public void DeleteAll() { LuceneTool.GetIndexWriter(indexName).DeleteAll(); }
public IEnumerable <T> GetByQuery <T>(Query q, string returnFields = null, Sort sort = null, Filter filter = null, int maxReturnNum = int.MaxValue) where T : class, new() { return(LuceneTool.GetByQuery <T>(indexSearcher, q, returnFields, sort, filter, maxReturnNum)); }
public IEnumerable <T> GetAll <T>(string returnFields = null, Sort sort = null) where T : class, new() { return(LuceneTool.GetAll <T>(indexSearcher, returnFields, sort)); }
public IEnumerable <T> GetByPage <T>(int pageIndex, int pageSize, out int total, string returnFields = null, Query q = null, Sort sort = null, Filter filter = null, int maxReturnNum = int.MaxValue) where T : class, new() { return(LuceneTool.GetByPage <T>(indexSearcher, pageIndex, pageSize, out total, returnFields, q, sort, filter, maxReturnNum)); }
//添加索引 public void Insert <T>(T model) { var doc = LuceneTool.CreateDoc(model); LuceneTool.GetIndexWriter(indexName).AddDocument(doc); }
//根据id获取一条数据 public T GetById <T>(object id, string returnFields = null) where T : class, new() { return(LuceneTool.GetById <T>(indexSearcher, id, returnFields)); }
//根据ids获取数据 public IEnumerable <T> GetByIds <T>(IEnumerable <object> ids, string returnFields = null) where T : class, new() { return(LuceneTool.GetByIds <T>(indexSearcher, ids, returnFields)); }
//根据id删除数据 public void DeleteById(object id) { Term term = new Term("Id", id.ToString()); LuceneTool.GetIndexWriter(indexName).DeleteDocuments(term); }
//根据字段ids获取数据 public IEnumerable <T> GetByFieldIn <T>(string fieldName, IEnumerable <string> ids, string returnFields = null) where T : class, new() { return(LuceneTool.GetByFieldIn <T>(indexSearcher, fieldName, ids, returnFields)); }
public int GetTotal(Query q = null) { return(LuceneTool.GetTotal(indexSearcher, q)); }