示例#1
0
        /// <summary>
        /// 更新索引
        /// </summary>
        /// <param name="changeset">实体</param>
        public void Update(LuceneIndexChangeset changeset)
        {
            var config = new IndexWriterConfig(Lucene.Net.Util.LuceneVersion.LUCENE_48, _analyzer);

            using var writer = new IndexWriter(_directory, config);
            foreach (var change in changeset.Entries)
            {
                switch (change.State)
                {
                case LuceneIndexState.Added:
                    writer.AddDocument(change.Entity.ToDocument());
                    break;

                case LuceneIndexState.Removed:
                    writer.DeleteDocuments(new Term("IndexId", change.Entity.IndexId));
                    break;

                case LuceneIndexState.Updated:
                    writer.UpdateDocument(new Term("IndexId", change.Entity.IndexId), change.Entity.ToDocument());
                    break;
                }
            }

            writer.Flush(true, changeset.HasDeletes);
        }
示例#2
0
        /// <summary>
        /// 删除索引
        /// </summary>
        /// <param name="entries">实体集</param>
        public void Delete <T>(List <T> entries) where T : ILuceneIndexable
        {
            var set = new LuceneIndexChangeset
            {
                Entries = entries.Select(e => new LuceneIndexChange(e, LuceneIndexState.Removed)).ToList()
            };

            Update(set);
        }
示例#3
0
        /// <summary>
        /// 检查数据库上下文更改,并返回LuceneIndexChanges类型的集合
        /// </summary>
        /// <returns> LuceneIndexChangeset  - 转换为LuceneIndexChanges类型的实体更改集合</returns>
        private LuceneIndexChangeset GetChangeset()
        {
            var changes = new LuceneIndexChangeset();

            foreach (var entity in Context.ChangeTracker.Entries().Where(x => x.State != EntityState.Unchanged))
            {
                var entityType = entity.Entity.GetType();
                if (!typeof(ILuceneIndexable).IsAssignableFrom(entityType) || entityType.GetMethod("ToDocument") is null)
                {
                    continue;
                }

                var change = new LuceneIndexChange(entity.Entity as ILuceneIndexable);

                switch (entity.State)
                {
                case EntityState.Added:
                    change.State = LuceneIndexState.Added;
                    break;

                case EntityState.Deleted:
                    change.State = LuceneIndexState.Removed;
                    break;

                case EntityState.Modified:
                    change.State = LuceneIndexState.Updated;
                    break;

                default:
                    change.State = LuceneIndexState.Unchanged;
                    break;
                }

                changes.Entries.Add(change);
            }

            return(changes);
        }
示例#4
0
        /// <summary>
        /// 更新索引
        /// </summary>
        /// <param name="change">实体</param>
        public void Update(LuceneIndexChange change)
        {
            var changeset = new LuceneIndexChangeset(change);

            Update(changeset);
        }