private void Index(IndexWriter writer, string key, RavenJObject metadata, Etag etag, bool recreateSearcher) { if (filesystem.ReadTriggers.CanReadFile(key, metadata, ReadOperation.Index) == false) { return; } lock (writerLock) { var lowerKey = key.ToLowerInvariant(); var doc = CreateDocument(lowerKey, metadata); // REVIEW: Check if there is more straight-forward/efficient pattern out there to work with RavenJObjects. var lookup = metadata.ToLookup(x => x.Key); foreach (var metadataKey in lookup) { foreach (var metadataHolder in metadataKey) { var array = metadataHolder.Value as RavenJArray; if (array != null) { // Object is an array. Therefore, we index each token. foreach (var item in array) { AddField(doc, metadataHolder.Key, item.ToString()); } } else { AddField(doc, metadataHolder.Key, metadataHolder.Value.ToString()); } } } if (doc.GetField(Constants.MetadataEtagField) == null) { doc.Add(new Field(Constants.MetadataEtagField, etag.ToString(), Field.Store.NO, Field.Index.ANALYZED_NO_NORMS)); } writer.DeleteDocuments(new Term("__key", lowerKey)); writer.AddDocument(doc); var customCommitData = new Dictionary <string, string> { { "LastETag", etag.ToString() } }; writer.Commit(customCommitData); if (recreateSearcher) { ReplaceSearcher(writer); } } }
private void Index(IndexWriter writer, string key, RavenJObject metadata) { lock (writerLock) { var lowerKey = key.ToLowerInvariant(); var doc = CreateDocument(lowerKey, metadata); // REVIEW: Check if there is more straight-forward/efficient pattern out there to work with RavenJObjects. var lookup = metadata.ToLookup(x => x.Key); foreach (var metadataKey in lookup) { foreach (var metadataHolder in metadataKey) { var array = metadataHolder.Value as RavenJArray; if (array != null) { // Object is an array. Therefore, we index each token. foreach (var item in array) { doc.Add(new Field(metadataHolder.Key, item.ToString(), Field.Store.NO, Field.Index.ANALYZED_NO_NORMS)); } } else { doc.Add(new Field(metadataHolder.Key, metadataHolder.Value.ToString(), Field.Store.NO, Field.Index.ANALYZED_NO_NORMS)); } } } writer.DeleteDocuments(new Term("__key", lowerKey)); writer.AddDocument(doc); // yes, this is slow, but we aren't expecting high writes count var etag = lookup["ETag"].First(); var customCommitData = new Dictionary <string, string>() { { "LastETag", etag.Value.ToString() } }; writer.Commit(customCommitData); ReplaceSearcher(writer); } }
public virtual void Index(string key, RavenJObject metadata) { lock (writerLock) { var lowerKey = key.ToLowerInvariant(); var doc = CreateDocument(lowerKey, metadata); // REVIEW: Check if there is more straight-forward/efficient pattern out there to work with RavenJObjects. var lookup = metadata.ToLookup(x => x.Key); foreach (var metadataKey in lookup) { foreach (var metadataHolder in metadataKey) { doc.Add(new Field(metadataHolder.Key, metadataHolder.Value.ToString(), Field.Store.NO, Field.Index.ANALYZED_NO_NORMS)); } } writer.DeleteDocuments(new Term("__key", lowerKey)); writer.AddDocument(doc); // yes, this is slow, but we aren't expecting high writes count writer.Commit(); ReplaceSearcher(); } }
private void Index(IndexWriter writer, string key, RavenJObject metadata, Etag etag, bool recreateSearcher) { if (filesystem.ReadTriggers.CanReadFile(key, metadata, ReadOperation.Index) == false) return; lock (writerLock) { var lowerKey = key.ToLowerInvariant(); var doc = CreateDocument(lowerKey, metadata); // REVIEW: Check if there is more straight-forward/efficient pattern out there to work with RavenJObjects. var lookup = metadata.ToLookup(x => x.Key); foreach (var metadataKey in lookup) { foreach (var metadataHolder in metadataKey) { var array = metadataHolder.Value as RavenJArray; if (array != null) { // Object is an array. Therefore, we index each token. foreach (var item in array) AddField(doc, metadataHolder.Key, item.ToString()); } else { AddField(doc, metadataHolder.Key, metadataHolder.Value.ToString()); } } } if (doc.GetField(Constants.MetadataEtagField) == null) doc.Add(new Field(Constants.MetadataEtagField, etag.ToString(), Field.Store.NO, Field.Index.ANALYZED_NO_NORMS)); writer.DeleteDocuments(new Term("__key", lowerKey)); writer.AddDocument(doc); var customCommitData = new Dictionary<string, string> { { "LastETag", etag.ToString() } }; writer.Commit(customCommitData); if (recreateSearcher) ReplaceSearcher(writer); } }
public virtual void Index(string key, RavenJObject metadata) { lock (writerLock) { var lowerKey = key.ToLowerInvariant(); var doc = CreateDocument(lowerKey, metadata); // REVIEW: Check if there is more straight-forward/efficient pattern out there to work with RavenJObjects. var lookup = metadata.ToLookup(x => x.Key); foreach ( var metadataKey in lookup ) { foreach ( var metadataHolder in metadataKey ) { var array = metadataHolder.Value as RavenJArray; if (array != null) { // Object is an array. Therefore, we index each token. foreach (var item in array) doc.Add(new Field(metadataHolder.Key, item.ToString(), Field.Store.NO, Field.Index.ANALYZED_NO_NORMS)); } else doc.Add(new Field(metadataHolder.Key, metadataHolder.Value.ToString(), Field.Store.NO, Field.Index.ANALYZED_NO_NORMS)); } } writer.DeleteDocuments(new Term("__key", lowerKey)); writer.AddDocument(doc); // yes, this is slow, but we aren't expecting high writes count writer.Commit(); ReplaceSearcher(); } }