public async Task FilterAsync(ContentOptionsViewModel model, IQuery <ContentItem> query, IUpdateModel updater)
        {
            var settings = (await _siteService.GetSiteSettingsAsync()).As <TaxonomyContentsAdminListSettings>();

            foreach (var contentItemId in settings.TaxonomyContentItemIds)
            {
                var viewModel = new TaxonomyContentsAdminFilterViewModel();
                if (await updater.TryUpdateModelAsync(viewModel, "Taxonomy" + contentItemId))
                {
                    // Show all items categorized by the taxonomy
                    if (!String.IsNullOrEmpty(viewModel.SelectedContentItemId))
                    {
                        if (viewModel.SelectedContentItemId.StartsWith("Taxonomy:", StringComparison.OrdinalIgnoreCase))
                        {
                            viewModel.SelectedContentItemId = viewModel.SelectedContentItemId.Substring(9);
                            query.All(
                                x => query.With <TaxonomyIndex>(x => x.TaxonomyContentItemId == viewModel.SelectedContentItemId)
                                );
                        }
                        else if (viewModel.SelectedContentItemId.StartsWith("Term:", StringComparison.OrdinalIgnoreCase))
                        {
                            viewModel.SelectedContentItemId = viewModel.SelectedContentItemId.Substring(5);
                            query.All(
                                x => query.With <TaxonomyIndex>(x => x.TermContentItemId == viewModel.SelectedContentItemId)
                                );
                        }
                    }
                }
            }
        }
示例#2
0
        /// <summary>
        /// Map query terms to posting list locations.
        /// </summary>
        private void Map(IQuery query)
        {
            if (query == null)
            {
                return;
            }

            //foreach (var q in query.All())
            Parallel.ForEach(query.All(), q =>
            {
                //foreach (var term in q.Terms)
                Parallel.ForEach(q.Terms, term =>
                {
                    var columnReader = CreateColumnReader(term.CollectionId, term.KeyId);

                    if (columnReader != null)
                    {
                        using (columnReader)
                        {
                            var hit = columnReader.ClosestMatch(term.Vector, _model);

                            if (hit != null)
                            {
                                term.Score           = hit.Score;
                                term.PostingsOffsets = hit.Node.PostingsOffsets;
                            }
                        }
                    }
                });
            });
        }
示例#3
0
        private void Model2SQL <T>(IQuery query, Model2Sql sqlObject)
        {
            if (query == null)
            {
            }
            else
            {
                sqlObject.SqlType = Model2Db.Query;

                Dictionary <IQueryValue, QueryLink> dic = query.All();
                int cur = 1;
                foreach (var item in dic)
                {
                    if (cur != 1)
                    {
                        sqlObject.Sql = sqlObject.Sql + string.Format(" {0} ", item.Value.ToString());
                    }
                    if (item.Key is QueryValue)
                    {
                        QueryValue2Model2Sql <T>(sqlObject, item);
                    }
                    else if (item.Key is Query)
                    {
                        Query2Model2Sql <T>(sqlObject, item);
                    }
                    else
                    {
                        throw new ArgumentException("未实现指定的IQuery类型");
                    }
                    cur++;
                }
            }
        }
示例#4
0
        public void ShouldReadWriteEpochMillisecondsDatTime()
        {
            using (IJournal <File> journal = CreateJournal(DateTimeMode.EpochMilliseconds))
            {
                TestUtils.GenerateRecords(journal, 1000, 2, GenerateFile);
                IQuery <File> r2 = journal.OpenReadTx();

                int i = 0;
                foreach (File file in r2.All())
                {
                    Assert.That(file.Path, Is.EqualTo(i.ToString(CultureInfo.InvariantCulture)));
                    DateTime expectedModifedDate =
                        TestUtils.START.AddMilliseconds(i * _timeIncrement);

                    Assert.That(DateUtils.DateTimeToUnixTimeStamp(file.Modified)
                                , Is.EqualTo(DateUtils.DateTimeToUnixTimeStamp(expectedModifedDate)));

                    DateTime?expectedCreatedDate = i % 2 == 0
                        ? TestUtils.START.AddMilliseconds(i * _timeIncrement * 2)
                        : (DateTime?)null;

                    Assert.That(file.Created, Is.EqualTo(expectedCreatedDate));
                    i++;
                }
            }
        }
示例#5
0
        private Model2Sql GetQuerySQL <T>(IQuery query)
        {
            if (query == null)
            {
                throw new ArgumentException("query不能为空");
            }

            Model2Sql sqlObject = new Model2Sql();

            sqlObject.SqlType = Model2Db.Query;

            Dictionary <IQueryValue, QueryLink> dic = query.All();

            if (dic.Count == 0)
            {
                throw new ArgumentException("query不包含查询字段");
            }
            int cur = 1;

            foreach (var item in dic)
            {
                if (cur != 1)
                {
                    sqlObject.Sql = sqlObject.Sql + string.Format(" {0} ", item.Value.ToString());
                }
                if (item.Key is QueryValue)
                {
                    QueryValue2Model2Sql <T>(sqlObject, item);
                }
                else if (item.Key is Query)
                {
                    Query2Model2Sql <T>(sqlObject, item);
                }
                else
                {
                    throw new ArgumentException("未实现指定的IQuery类型");
                }
                cur++;
            }

            return(sqlObject);
        }
示例#6
0
        public void ShouldReadWriteNetDateTimes()
        {
            using (IJournal <File> journal = CreateJournal(DateTimeMode.DotNetDateTime))
            {
                TestUtils.GenerateRecords(journal, 1000, 2, GenerateFile);
                IQuery <File> r2 = journal.OpenReadTx();

                int i = 0;
                foreach (File file in r2.All())
                {
                    Assert.That(file.Path, Is.EqualTo(i.ToString(CultureInfo.InvariantCulture)));
                    Assert.That(file.Modified,
                                Is.EqualTo(TestUtils.START.AddMilliseconds(i * _timeIncrement)));

                    Assert.That(file.Created, Is.EqualTo(
                                    i % 2 == 0
                            ? TestUtils.START.AddMilliseconds(i * _timeIncrement * 2)
                            : (DateTime?)null));
                    i++;
                }
            }
        }