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)); }
/// <summary> /// Insert new documetn in storage. /// </summary> /// <param name="documentTermsData"></param> /// <returns>Return new Id of new document </returns> public string PostDocumentTerms(DocumentTermsData documentTermsData) { lock (_lockerDocumentTermsColl) { return(DocumentTermsColl.Insert(documentTermsData)); } }
/// <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); } }
public int CountDocumentTerms(string document) { lock (_lockerDocumentTermsColl) { return(DocumentTermsColl.Count()); } }
// Region for all method of collection DocumentTermsColl #region DocumentTermsColl /// <summary> /// Get one DocumentTermsData filtered by document id. /// 2020-11-08T18:07:18 /// </summary> /// <param name="document"></param> /// <returns></returns> public DocumentTermsData GetDocumentTerm(string document) { lock (_lockerDocumentTermsColl) { return(DocumentTermsColl.FindOne(x => x.Document == document)); } }