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; }
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; }
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); } }
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(); } }
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(); } }