コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
ファイル: IndexStorage.cs プロジェクト: j2jensen/ravendb
        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);
            }
        }
コード例 #5
0
ファイル: IndexStorage.cs プロジェクト: felixmm/ravendb
        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();
            }
        }