예제 #1
0
        public static LDocument Convert(Document doc, Schema schema)
        {
            var ldoc = new LDocument();
            foreach (var sf in schema.Fields)
            {
                foreach (var lf in Convert(sf, doc))
                {
                    ldoc.Add(lf);
                }
            }
            ldoc.Add(
                new LField(
                    SchemaNameField,
                    schema.Name,
                    ConvertToStore(true, false),
                    ConvertToIndexFlag(false, false)
                    )
                    );

            ldoc.Add(
                new LField(
                    SchemaVersionField,
                    schema.Version,
                    ConvertToStore(true, false),
                    ConvertToIndexFlag(false, false)
                    )
                    );
            return ldoc;
        }
예제 #2
0
 public void Update(Document doc, IndexWorkItem workItem)
 {
     Update(
         new IndexOperation { Document = doc, Type = IndexOperationType.Save },
         workItem
         );
 }
예제 #3
0
파일: Schema.cs 프로젝트: mrkurt/mubble-old
        public IEnumerable<Field> GetUniqueFields(Document doc)
        {
            var blah = from f in doc.Fields.All
                       join sf in this.Fields on f.Name equals sf.Name
                       where sf.Unique
                       orderby f.Name
                       select f;

            return blah;
        }
예제 #4
0
        public static Document GetDocument()
        {
            var doc = new Document();
            doc.Fields.Add(new Field { Name = "ID", Values = { "12345" } });
            doc.Fields.Add(new Field { Name = "Title", Values = { "Kurt Rocks" } });
            doc.Fields.Add(new Field { Name = "Text", Values = { "Lorem Ipsum Kurtum Spurtum Kurt rules" } });
            doc.Fields.Add(new Field { Name = "Tag", Values = { "Kurt", "Owns", "Joo" } });

            doc.Schema = GetSchema();

            return doc;
        }
예제 #5
0
        public static IEnumerable<LField> Convert(SchemaField field, Document doc)
        {
            var f = doc.Fields[field.Name];
            if (f == null) yield break;

            var values = field.MultiValued ? f.Values.ToArray() : new string[]{ f.GetValue() };

            foreach (var value in values)
            {
                yield return new LField(
                    field.Name,
                    FieldHelper.Format(field, value),
                    ConvertToStore(field.Stored, field.Compressed),
                    ConvertToIndexFlag(field.Indexed, field.Tokenized)
                    );

            }
        }
예제 #6
0
파일: Index.cs 프로젝트: mrkurt/mubble-old
 public void Update(Document document, IndexWorkItem workItem)
 {
     //TODO: Validate against the supplied schema
     this.writer.Update(document, workItem);
 }
예제 #7
0
파일: Index.cs 프로젝트: mrkurt/mubble-old
 public IndexWorkItem Update(Document document)
 {
     var wi = new IndexWorkItem();
     Update(document, wi);
     return wi;
 }
예제 #8
0
        public void Indexing()
        {
            var schema = new Schema("PerfTest", "1.0")
            {
                Fields =
                {
                    new SchemaField{ Name = "ID", Indexed = true, Stored = true, Tokenized = false, Unique = true},
                    new SchemaField{ Name = "Title",Indexed = true, Stored = true, Tokenized = true, Unique = false},
                    new SchemaField{ Name = "Body", Indexed = true, Stored = true, Tokenized = true, Unique = false}
                },
                DefaultSearchField = "Body"
            };

            var docs = new List<Document>();
            var fields = new string[] { "ID", "Title", "Body" };

            foreach (var file in System.IO.Directory.GetFiles("ReutersData", "*.sgm"))
            {
                var text = System.IO.File.ReadAllText(file);
                var matches = reutersSgm.Matches(text);

                foreach (Match match in matches)
                {
                    if (match.Success)
                    {
                        var doc = new Document();
                        doc.Schema = schema;

                        foreach(var key in fields)
                        {
                            doc.Fields.Add(new Field{ Name = key, Values = { match.Groups[key].Value }});
                        }
                        docs.Add(doc);
                    }
                }
            }

            if (System.IO.Directory.Exists("PerfIndex"))
            {
                System.IO.Directory.Delete("PerfIndex", true);
            }

            var idx = Index.Open("PerfIndex");
            idx.Update(schema);

            var rand = new Random();
            var max = docs.Count;

            var results = new List<Mubble.Indexing.IndexWorkItem>();

            var curr = 0;

            Mubble.Treadmill.Func<Mubble.Treadmill.Result> action = () =>
                {
                    var i = System.Threading.Interlocked.Increment(ref curr);
                    if (i > docs.Count)
                    {
                        i = i % docs.Count;
                    }

                    var wi = idx.Update(docs[i]);
                    results.Add(wi);
                    return new Mubble.Treadmill.Result(true, "Indexed!");
                };

            var cpu = new System.Diagnostics.PerformanceCounter("Processor", "% Processor Time", "_Total", true);

            Mubble.Treadmill.Func<Mubble.Treadmill.Benchmark> bench = () =>
                {
                    var start = DateTime.Now;
                    var r = idx.Search("Body:output");
                    var msg = string.Concat("Search for output - ", r.Hits.Count, " results");
                    var elapsed = DateTime.Now - start;

                    return new Mubble.Treadmill.Benchmark(msg, elapsed.Milliseconds, DateTime.Now);
                };

            Mubble.Treadmill.Func<Mubble.Treadmill.Benchmark> proc = () =>
            {
                var count = cpu.NextValue();

                return new Mubble.Treadmill.Benchmark("Processor", count, DateTime.Now);
            };

            var actions = new List<Mubble.Treadmill.Command>(1);
            var benchmarks = new List<Mubble.Treadmill.Collect>(1);
            actions.Add(new Mubble.Treadmill.Command(action, "Index doc"));
            benchmarks.Add(new Mubble.Treadmill.Collect(bench));
            benchmarks.Add(new Mubble.Treadmill.Collect(proc));

            var commands = new Mubble.Treadmill.Commands(actions, () =>
            {
                var total = results.Count;
                Mubble.Tests.Indexing.WaitFor(results);
                idx.Dispose();
                return new Mubble.Treadmill.Result(true, string.Concat("Waited for ", total, " operations"));
            });

            Mubble.Treadmill.Runner.Start(50000, 8, commands, benchmarks);
        }
예제 #9
0
 public void Save(Document doc, object id)
 {
     Save(doc, id, RowStatus.Active);
 }
예제 #10
0
 public void Save(Document doc)
 {
     Save(doc, null);
 }
예제 #11
0
        void Save(Document doc, object id, RowStatus status)
        {
            var sql = this.settings.GetUpdateSql();

            using (var cn = new SqlConnection(this.settings.ConnectionString))
            using (var cmd = new SqlCommand(sql, cn))
            {
                cmd.Parameters.AddWithValue("@ID", id);
                cmd.Parameters.AddWithValue("@Document", doc != null ? (object)Utility.Serialize(doc) : DBNull.Value);
                cmd.Parameters.AddWithValue("@Status", status);
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
            }
        }