public int Indexing <TObj>(int documentId, TObj obj) where TObj : class { _documentStorage.Insert <TObj>(documentId, obj); NumberOfDocuments++; var numberOfTerms = 0; foreach (var member in typeof(TObj).GetProperties()) { var fieldName = member.FullName(); var fieldId = _fieldDictionary.GetOrCreate(fieldName); var attribute = member.GetCustomAttributes(typeof(IndexingAttribute), true).FirstOrDefault(); if (attribute != null && member.PropertyType == typeof(string)) { var text = member.GetValue(obj, null) as string; if (!string.IsNullOrEmpty(text)) { foreach (var token in _tokinizer.GetTokens(text)) { numberOfTerms++; var wordId = _vocabulary.GetOrAddIndex(token.Term.ToLower()); var termInfo = new TermInformation() { TermIndex = token.Index, FieldId = fieldId, StartIndex = 0, StopIndex = 0 }; _invertedIndex.Insert(wordId, documentId, termInfo); } } } } NumberOfTerms += numberOfTerms; _documentNumberOfTerms[documentId] = numberOfTerms; return(documentId); }
private int IndexingText(int documentId, string text, string fieldName) { var numberOfTokens = 0; var tokens = _tokinizer.GetTokens(text); var invertedIndex = _fieldIndex.GetIndexer(fieldName); foreach (var token in tokens) { var wordId = _vocabulary.GetOrAddIndex(token.Term.ToLower()); var termInfo = new TermInformation() { TermIndex = token.Index, StartIndex = 0, StopIndex = 0 }; invertedIndex.Insert(wordId, documentId, termInfo); numberOfTokens++; } return(numberOfTokens); }