Esempio n. 1
0
        public void Test()
        {
            var indexer = new EntityIndexer();
            var group = new MetadataDefinitionGroupProjection{Identity = Guid.NewGuid(), Name="xxx"};

            indexer.SaveIndex(new EntityProjection(Guid.NewGuid(), Guid.Empty, "sheep"),
                group,
                new EntityValueProjection[0]);
            indexer.SaveIndex(new EntityProjection(Guid.NewGuid(), Guid.Empty, "shop"),
                group,
                new EntityValueProjection[0]);

            var result = indexer.SearchKeywords("shop", 10, 1);

            Assert.Greater(result.TotalHits, 0);
        }
 public SchemaTransferObject(MetadataDefinitionGroupProjection entity, IEnumerable<MetadataDefinitionGroupMetadataProjection> attributes)
 {
     Entity = entity;
     Attributes = attributes;
 }
Esempio n. 3
0
 private Document ToDocument(EntityProjection entity, MetadataDefinitionGroupProjection group, IEnumerable<EntityValueProjection> values)
 {
     var doc = new Document();
     foreach (var field in ToFields(entity, group, values))
         doc.Add(field);
     return doc;
 }
Esempio n. 4
0
        public IEnumerable<Field> ToFields(EntityProjection entity, MetadataDefinitionGroupProjection group, IEnumerable<EntityValueProjection> values)
        {
            yield return new Field(FIELD_ID, entity.Identity.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED);
            yield return new Field(FIELD_NAME, entity.Name, Field.Store.YES, Field.Index.ANALYZED);
            yield return new Field(FIELD_NAME_RAW, entity.Name, Field.Store.NO, Field.Index.NOT_ANALYZED);
            if (group!= null)
            {
                yield return new Field(FIELD_GROUP_ID, group.Identity.ToString(), Field.Store.YES, Field.Index.ANALYZED);
                yield return new Field(FIELD_GROUP_NAME, group.Name, Field.Store.YES, Field.Index.ANALYZED);
            }

            foreach (var value in values)
            {
                foreach (var keyword in MetadataDefinition.KeywordDefinitions.Where(x => x.Equals(value.Name, StringComparison.InvariantCultureIgnoreCase)))
                {
                    yield return new Field(keyword, value.Value, Field.Store.YES, Field.Index.ANALYZED);
                }

                yield return new Field(FIELD_METADATA, value.Value, Field.Store.YES, Field.Index.ANALYZED);
            }
        }
Esempio n. 5
0
        public void SaveIndex(EntityProjection entity, MetadataDefinitionGroupProjection group, IEnumerable<EntityValueProjection> values)
        {
            var doc = ToDocument(entity, group, values);
            var term = new Term(FIELD_ID, entity.Identity.ToString());

            using (var writer = OpenWriter())
            {
                writer.UpdateDocument(term, doc);
                writer.Commit();
                writer.Optimize();
            }
        }
Esempio n. 6
0
        public void RenameGroup(MetadataDefinitionGroupProjection @group)
        {
            var term = new Term(FIELD_GROUP_ID, @group.Identity.ToString());
            using (var writer = OpenWriter())
            using (var searcher = new IndexSearcher(IndexDir, true))
            {
                while(true)
                {
                    const int BATCH = 100;
                    var result = searcher.Search(new TermQuery(term), BATCH);
                    foreach (var scoreDoc in result.ScoreDocs)
                    {
                        var doc = searcher.Doc(scoreDoc.Doc);
                        doc.GetField(FIELD_GROUP_NAME).SetValue(group.Name);
                        writer.UpdateDocument(new Term(FIELD_ID, doc.Get(FIELD_ID)), doc);
                    }

                    if (result.TotalHits <= BATCH)
                        break;
                }

                writer.Commit();
                writer.Optimize();
            }
        }