public bool AddPhrase(int accountID, string text, SourceType sourceType) { return InvokeSafeSingleCall(() => { text = text.ToLower(); var phrase = Phrase.DataSource .WhereEquals(Phrase.Fields.Text, text) .WhereEquals(Phrase.Fields.CollectionIdentity, (short)AlgoBase.CollectionIdentity) .First(); if (phrase == null) { phrase = new Phrase { Datecreated = DateTime.UtcNow, Text = text, Status = PhraseStatus.NotCollected, CollectionIdentity = AlgoBase.CollectionIdentity, }; phrase.Save(); } var phraseAccount = Phraseaccount.DataSource .WhereEquals(Phraseaccount.Fields.AccountidentityID, accountID) .WhereEquals(Phraseaccount.Fields.PhraseID, phrase.ID) .WhereEquals(Phraseaccount.Fields.CollectionIdentity, (short)AlgoBase.CollectionIdentity) .First(); if (phraseAccount == null) { phraseAccount = new Phraseaccount { Datecreated = DateTime.UtcNow, AccountidentityID = accountID, PhraseID = phrase.ID, SourceType = sourceType, CollectionIdentity = AlgoBase.CollectionIdentity }; } else { phraseAccount.SourceType |= sourceType; } return phraseAccount.Save(); }, false); }
protected override void DoAction() { var entities = GetEntitiesToProcess(); foreach (var entity in entities) { var queriesForDomain = new HashSet<string>(); entity.Status |= DomainStatus.PhrasesCollected; try { for (var page = 1;; page++) { var hasUnique = false; var content = SpywordsQueryWrapper.GetQueriesForDomain(entity.Domain, page); var listLinksToInsert = new List<Domainphrase>(); foreach (Match wordMatch in _siteSpywordsExpractor.Matches(content)) { var word = wordMatch.Groups["word"].Value.ToLower(); if (queriesForDomain.Contains(word)) { continue; } queriesForDomain.Add(word); hasUnique = true; var phrase = Phrase.DataSource .WhereEquals(Phrase.Fields.Text, word) .First(Phrase.Fields.ID); if(phrase == null) { phrase = new Phrase { Datecreated = DateTime.UtcNow, Status = PhraseStatus.NotCollected, CollectionIdentity = CollectionIdentity, Text = word }; phrase.Save(); } var firstDomainPhrase = Domainphrase.DataSource .WhereEquals(Domainphrase.Fields.DomainID, entity.ID) .WhereEquals(Domainphrase.Fields.PhraseID, phrase.ID) .First(); if (firstDomainPhrase == null) { var domainphrase = new Domainphrase { DomainID = entity.ID, PhraseID = phrase.ID, SourceType = SourceType.Context, CollectionIdentity = CollectionIdentity }; listLinksToInsert.Add(domainphrase); } else { firstDomainPhrase.SourceType |= SourceType.Context; firstDomainPhrase.Save(); } } TaskRunner.Instance.AddAction(() => { listLinksToInsert.Save<Domainphrase, int>(); }); if (!hasUnique) { break; } } } catch (Exception ex) { Logger.Error(ex); entity.Status |= DomainStatus.PhrasesCollectedError; } entity.Save(); } }