コード例 #1
0
 public async Task Update(IEnumerable <PodcastDocument> documents)
 {
     foreach (var document in documents)
     {
         await DoUpdate(document);
     }
     await _solrPodcasts.CommitAsync();
 }
コード例 #2
0
        public virtual async Task DeleteAsync(TId id, CancellationToken cancellationToken)
        {
            if (Equals(id, default(TId)))
            {
                return;
            }
            await _solrOperations.DeleteAsync(id.ToString());

            await _solrOperations.CommitAsync();
        }
コード例 #3
0
        public async Task <ResponseResult> Add()
        {
            // 同步添加文档
            solr.Add(
                new PostDoc()
            {
                Id       = 30001,
                Name     = "This SolrNet Name",
                Title    = "This SolrNet Title",
                Excerpt  = "This SolrNet Excerpt",
                Content  = "This SolrNet Content 30001",
                PostDate = DateTime.Now
            }
                );
            // 异步添加文档
            await solr.AddAsync(
                new PostDoc()
            {
                Id       = 30002,
                Name     = "This SolrNet Name",
                Title    = "This SolrNet Title",
                Excerpt  = "This SolrNet Excerpt",
                Content  = "This SolrNet Content 30002",
                PostDate = DateTime.Now
            }
                );

            ResponseHeader responseHeader = await solr.CommitAsync();

            ResponseResult response = new ResponseResult();

            if (responseHeader.Status == 0)
            {
                response.Status = ResponseStatus.SUCCEED;
            }
            return(response);
        }
コード例 #4
0
        public async Task AddAsync(CandidatoDocumento documento)
        {
            await _solr.AddAsync(documento);

            await _solr.CommitAsync();
        }
コード例 #5
0
 public void AddToSolr(T indexable)
 {
     _solrPeople.AddAsync(indexable);
     _solrPeople.CommitAsync();
 }
コード例 #6
0
        public static async Task UpdateFeed(IDbContextFactory <FeedReaderDbContext> dbFactory, ISolrOperations <Solrs.FeedItem> solrFeedItems, ServerCore.Models.Feed feed, ILogger log, HttpClient httpClient = null)
        {
            log.LogInformation($"UpdateFeed: {feed.Uri}");

            // Get original uri.
            var feedUriHash     = feed.Id;
            var feedOriginalUri = feed.Uri;

            // Get feed content.
            if (httpClient == null)
            {
                var handler = new HttpClientHandler()
                {
                    AutomaticDecompression = System.Net.DecompressionMethods.All, AllowAutoRedirect = true
                };
                httpClient = new HttpClient(handler);
                httpClient.DefaultRequestHeaders.Add("User-Agent", "FeedReader");
                httpClient.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue {
                    NoCache = true
                };
            }

            var feedContent = await httpClient.GetStringAsync(feedOriginalUri);

            // Create parser.
            var parser = FeedParser.FeedParser.Create(feedContent);

            // Parse feed info.
            var feedInfo = parser.ParseFeedInfo();

            // Parse html content to get icon uri.
            if (string.IsNullOrWhiteSpace(feedInfo.IconUri))
            {
                string uri = null;
                try
                {
                    if (!string.IsNullOrWhiteSpace(feedInfo.WebsiteLink))
                    {
                        uri = feedInfo.WebsiteLink;
                    }
                    else
                    {
                        uri = new Uri(feedOriginalUri).GetLeftPart(UriPartial.Authority);
                    }

                    var response = await httpClient.GetAsync(uri);

                    feedInfo.IconUri = new HtmlParser(await response.Content.ReadAsStringAsync(), response.RequestMessage.RequestUri.ToString()).ShortcurtIcon;
                }
                catch (HttpRequestException ex)
                {
                    log.LogError($"Try download the content of {uri} failed. Ex: {ex.Message}");
                }
                catch (Exception ex)
                {
                    log.LogError($"Parse html content of {uri} failed. Ex: {ex.Message}");
                }
            }

            // Try to get the favicon.ico file directly, like https://www.cagle.com, we can't get any icon info from the index page, but it has favicon.ico file.
            if (string.IsNullOrWhiteSpace(feedInfo.IconUri))
            {
                string uri = null;
                try
                {
                    var uriBuilder = new UriBuilder(string.IsNullOrWhiteSpace(feedInfo.WebsiteLink) ? feedOriginalUri : feedInfo.WebsiteLink);
                    uriBuilder.Path = "/favicon.ico";
                    uri             = uriBuilder.Uri.ToString();
                    var response = await httpClient.GetAsync(uriBuilder.Uri);

                    if (response.IsSuccessStatusCode)
                    {
                        feedInfo.IconUri = uri;
                    }
                }
                catch (HttpRequestException ex)
                {
                    log.LogError($"Try download the content of {uri} failed. Ex: {ex.Message}");
                }
            }

            // Save feed info to table.
            feed.Description         = feedInfo.Description;
            feed.IconUri             = feedInfo.IconUri;
            feed.LastUpdateTimeInUtc = DateTime.UtcNow;
            feed.Name       = feedInfo.Name;
            feed.WebSiteUri = feedInfo.WebsiteLink;

            // Parse feed items.
            var feedItems = parser.ParseFeedItems();

            // Save feed items to db.
            var db = dbFactory.CreateDbContext();

            foreach (var item in feedItems)
            {
                var feedItemId = item.PermentLink.Sha256();
                if (await db.FeedItems.FindAsync(feedItemId) == null)
                {
                    var feedItem = new ServerCore.Models.FeedItem
                    {
                        Content          = item.Content,
                        FeedId           = feed.Id,
                        Id               = feedItemId,
                        PublishTimeInUtc = item.PubDate.ToUniversalTime(),
                        Summary          = item.Summary,
                        Title            = item.Title,
                        TopicPictureUri  = item.TopicPictureUri,
                        Uri              = item.PermentLink
                    };
                    db.FeedItems.Add(feedItem);
                    solrFeedItems.Add(new Solrs.FeedItem(feedItem, feed));
                }
            }
            await db.SaveChangesAsync();

            // Save to solrs
            try
            {
                await solrFeedItems.CommitAsync();
            }
            catch (Exception ex)
            {
                log.LogError($"Save to solrs failed. ex: {ex.Message}");
            }

            log.LogInformation($"UpdateFeed: {feed.Uri} finished");
        }