public CollectionSession(string collectionId, SessionFactory sessionFactory) { SessionFactory = sessionFactory; CollectionId = collectionId; }
protected KeyValueSession(string collectionName, ulong collectionId, SessionFactory sessionFactory) : base(collectionName, collectionId, sessionFactory) { }
public void Write(IEnumerable <IDictionary> data, ITokenizer tokenizer) { foreach (var model in data) { var docId = _docIx.GetNextDocId(); var docMap = new List <(long keyId, long valId)>(); foreach (var key in model.Keys) { var keyStr = key.ToString(); var keyHash = keyStr.ToHash(); var fieldIndex = CloneIndex(keyHash); var val = (IComparable)model[key]; var str = val as string; var tokens = new HashSet <string>(); long keyId, valId; if (str == null || keyStr[0] == '_') { tokens.Add(tokenizer.Normalize(val.ToString())); } else { var tokenlist = tokenizer.Tokenize(str).ToList(); foreach (var token in tokenlist) { tokens.Add(token); } } if (fieldIndex == null) { // We have a new key! // store key var keyInfo = _keys.Append(keyStr); keyId = _keyIx.Append(keyInfo.offset, keyInfo.len, keyInfo.dataType); SessionFactory.AddKey(keyHash, keyId); // add new index to global in-memory tree fieldIndex = new VectorNode(); //Index.Add(keyId, fieldIndex); } else { keyId = SessionFactory.GetKey(keyHash); } // store value var valInfo = _vals.Append(val); valId = _valIx.Append(valInfo.offset, valInfo.len, valInfo.dataType); // store refs to keys and values docMap.Add((keyId, valId)); foreach (var token in tokens) { // add token and postings to index fieldIndex.Add(token, docId); } if (!_dirty.ContainsKey(keyId)) { _dirty.Add(keyId, fieldIndex); } } var docMeta = _docs.Append(docMap); _docIx.Append(docMeta.offset, docMeta.length); } }