private void Init() { string dir = DirHandler.CreateDirInRootApp("data", "dbs"); PathDirRootDataBases = Path.Combine(dir, _databaseName); ConnectionString = new ConnectionString() { Filename = PathDirRootDataBases, Connection = ConnectionType.Shared,//TODO: is it best solution? Probati sa ConnectionType.Direct //ReadOnly = true }; using var db = new LiteDatabase(ConnectionString); DocumentTermsColl = db.GetCollection <DocumentTermsData>(DocumentTerms); DocumentTermsColl.EnsureIndex(nameof(DocumentTermsData.Document), true);//+ SP: staviti da je dokument id unique - ispitati ima li problema negdje radi toga //Example using multi key index https://github.com/mbdavid/LiteDB/blob/master/LiteDB.Tests/Database/MultiKey_Mapper_Tests.cs - 2020-12-28T10:14:38 DocumentTermsColl.EnsureIndex(d => d.Terms.Select(z => z.Term)); TermDocumentCountColl = db.GetCollection <TermDocumentCountData>(TermDocumentCount); TermDocumentCountColl.EnsureIndex(nameof(TermDocumentCountData.Term)); TermDocumentColl = db.GetCollection <TermDocumentData>(TermDocument); TermDocumentColl.EnsureIndex(nameof(TermDocumentData.Term)); }
public TermDocumentCountData GetTermDocumentCount(string term) { lock (_lockerTermDocumentCountColl) { return(TermDocumentCountColl.FindOne(x => x.Term == term)); } }
/// <summary> /// Insert or Update all documents /// </summary> /// <param name="termDocumentCounts"></param> /// <returns>Number of inserted new document </returns> public int PutTermDocumentCounts(List <TermDocumentCountData> termDocumentCounts) { lock (_lockerTermDocumentCountColl) { return(TermDocumentCountColl.Upsert(termDocumentCounts)); } }
/// <summary> /// Reduce number for each count in TermDocumentCountColl {term, count} /// Delete {Document, List<TermData>} from DocumentTermsColl /// ?Delete { term, documentId} from TermDocumentColl /// 2020-12-23T10:12:38 /// </summary> /// <param name="documentId"></param> /// <returns></returns> public bool DeleteDocument(string documentId) { lock (_lockerDocumentTermsColl) { DocumentTermsData documentTermsData = DocumentTermsColl.FindOne(d => d.Document == documentId); if (documentTermsData != null) { //Reduce number for each count in TermDocumentCountColl {term, count} lock (_lockerTermDocumentCountColl) { foreach (TermData termData in documentTermsData.Terms) { TermDocumentCountData termDocumentCountData = TermDocumentCountColl.FindOne(d => d.Term == termData.Term); if (termDocumentCountData != null) { termDocumentCountData.Count--; TermDocumentCountColl.Update(termDocumentCountData); } } //Delete {Document, List<TermData>} from DocumentTermsColl return(DocumentTermsColl.Delete(documentTermsData.Id)); } } return(false); } }