/*
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.contentwarehouse.v1.model;

/**
 * =========================================================================== # Make sure you read
 * the comments in the bottom before you add any new field. NB: As noted in the comments, this
 * protocol buffer is used in both indexing and serving. In mustang serving implementations we only
 * decode perdocdata during the search phase, and so this protocol should only contain data used
 * during search. See mustang/repos_www/attachments.proto:{MustangBasicInfo,MustangContentInfo} for
 * protocols used during search and/or docinfo. Next available tag deprecated, use this (and look
 * for commented out fields): blaze-bin/net/proto_compiler/protocol-compiler --freetags \
 * indexer/perdocdata/perdocdata.proto Next tag: 223
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Document AI Warehouse API. For a detailed explanation
 * see:
 * <a href="https://developers.google.com/api-client-library/java/google-http-java-client/json">https://developers.google.com/api-client-library/java/google-http-java-client/json</a>
 * </p>
 *
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public final class PerDocData extends com.google.api.client.json.GenericJson {

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("BlogData")
  private BlogPerDocData blogData;

  /**
   * the book citation data for each web page, the average size is about 10 bytes
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("BookCitationData")
  private BookCitationPerDocData bookCitationData;

  /**
   * The obfuscated google profile gaia id(s) of the author(s) of the document. This field is
   * deprecated, use the string version.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("DEPRECATEDAuthorObfuscatedGaia") @com.google.api.client.json.JsonString
  private java.util.List<java.math.BigInteger> dEPRECATEDAuthorObfuscatedGaia;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("DEPRECATEDQuarantineWhitelist")
  private java.lang.Boolean dEPRECATEDQuarantineWhitelist;

  /**
   * The document spam score is represented as a 7-bits, going from 0 to 127.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("DocLevelSpamScore")
  private java.lang.Integer docLevelSpamScore;

  /**
   * Free form debug info. NB2: consider carefully what to save here. It's easy to eat lots of gfs
   * space with debug info that nobody needs...
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Event")
  private java.util.List<PerDocDebugEvent> event;

  /**
   * The gibberish score is represented in 7 bits, going from 0 to 127.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("GibberishScore")
  private java.lang.Integer gibberishScore;

  /**
   * 16 bytes of groups2 data: used only in groups2 index
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("GroupsData")
  private GroupsPerDocData groupsData;

  /**
   * Is this document considered spam by the anchor bayes classifier?
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("IsAnchorBayesSpam")
  private java.lang.Boolean isAnchorBayesSpam;

  /**
   * The keyword stuffing score is represented in 7 bits, going from 0 to 127.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("KeywordStuffingScore")
  private java.lang.Integer keywordStuffingScore;

  /**
   * Additional metadata for lowend mobile documents in the Google index.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("MobileData")
  private MobilePerDocData mobileData;

  /**
   * The original content score is represented as a 7-bits, going from 0 to 127. Only pages with
   * little content have this field. The actual original content score ranges from 0 to 512. It is
   * encoded with quality_q2::OriginalContentUtil::EncodeOriginalContentScore(). To decode the
   * value, use quality_q2::OriginalContentUtil::DecodeOriginalContentScore().
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("OriginalContentScore")
  private java.lang.Integer originalContentScore;

  /**
   * Additional metadata for Premium document in the Google index.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PremiumData")
  private PremiumPerDocData premiumData;

  /**
   * bitmask of QuarantineBits (or'd together) used to store quarantine related information. For
   * example: QUARANTINE_WHITELIST | QUARANTINE_URLINURL.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("QuarantineInfo")
  private java.lang.Integer quarantineInfo;

  /**
   * DEPRECATED ---------------------------------------------------------------- Please do not use
   * these fields in any new code. experimental
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ScaledExptIndyRank")
  private java.lang.Integer scaledExptIndyRank;

  /**
   * experimental
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ScaledExptIndyRank2")
  private java.lang.Integer scaledExptIndyRank2;

  /**
   * experimental
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ScaledExptIndyRank3")
  private java.lang.Integer scaledExptIndyRank3;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ScaledExptSpamScoreEric")
  private java.lang.Integer scaledExptSpamScoreEric;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ScaledExptSpamScoreYoram")
  private java.lang.Integer scaledExptSpamScoreYoram;

  /**
   * The independence rank is represented as a 16-bit integer, which is multiplied by (max_indy_rank
   * / 65536) to produce actual independence rank values. max_indy_rank is typically 0.84.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ScaledIndyRank")
  private java.lang.Integer scaledIndyRank;

  /**
   * End DEPRECATED ------------------------------------------------------------ Link age score is
   * represented as a 7-bit integer, going from 0 to 127.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ScaledLinkAgeSpamScore")
  private java.lang.Integer scaledLinkAgeSpamScore;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ScaledSpamScoreEric")
  private java.lang.Integer scaledSpamScoreEric;

  /**
   * Spamscores are represented as a 7-bit integer, going from 0 to 127.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ScaledSpamScoreYoram")
  private java.lang.Integer scaledSpamScoreYoram;

  /**
   * The spamword score is represented in 7-bits, going from 0 to 127.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("SpamWordScore")
  private java.lang.Integer spamWordScore;

  /**
   * Tag-site-ness of a page, repesented in 7-bits range from 0 to 100. Smaller value means worse
   * tag page.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("TagPageScore")
  private java.lang.Integer tagPageScore;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ToolBarData")
  private ToolBarPerDocData toolBarData;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("WhirlpoolDiscount")
  private java.lang.Float whirlpoolDiscount;

  /**
   * AppsLink contains Android application IDs in outlinks. It is used to improve results ranking
   * within applications universal. See http://go/apps-universal for the project details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityCalypsoAppsLink appsLink;

  /**
   * For indexing Asteroid Belt intent scores. See go/asteroid-belt for details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityOrbitAsteroidBeltDocumentIntentScores asteroidBeltIntents;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> authorObfuscatedGaiaStr;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private BiasingPerDocData biasingdata;

  /**
   * A replacement for BiasingPerDocData that is more space efficient. Once this is live everywhere,
   * biasingdata will be deprecated.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private BiasingPerDocData2 biasingdata2;

  /**
   * The body words over tokens ratios for the beginning part and whole doc. NB: To save space,
   * field body_words_to_tokens_ratio_total is not set if it has the same value as
   * body_words_to_tokens_ratio_begin (e.g., short docs).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float bodyWordsToTokensRatioBegin;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float bodyWordsToTokensRatioTotal;

  /**
   * Brainloc contains location information for the document. See ariane/273189 for details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityGeoBrainlocBrainlocAttachment brainloc;

  /**
   * A measure of commerciality of the document Score > 0 indicates document is commercial (i.e.
   * sells something) Computed by repository/pageclassifiers/parsehandler-commercial.cc
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float commercialScore;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private CompressedQualitySignals compressedQualitySignals;

  /**
   * Compressed URL string used for SETI.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String compressedUrl;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private ContentAttributions contentAttributions;

  /**
   * This field stores the country information for the document in the form of CountryAttachment.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private CountryCountryAttachment countryInfo;

  /**
   * This field is used internally by the docjoiner to forward the crawl pageranks from original
   * canonicals to canonicals we actually chose; outside sources should not set it, and it should
   * not be present in actual docjoins or the index.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer crawlPagerank;

  /**
   * For crawler-ID variations, the crawling context applied to the document. See go/url, and the
   * description in google3/indexing/crawler_id
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private LogsProtoIndexingCrawlerIdCrawlerIdProto crawlerIdProto;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private CrowdingPerDocData crowdingdata;

  /**
   * Stores dates-related info (e.g. page is old based on its date annotations). Used in
   * FreshnessTwiddler. Use encode/decode functions from quality/timebased/utils/dates-info-helper-
   * inl.h
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long datesInfo;

  /**
   * Contains desktop interstitials signal for VOLT ranking change.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private IndexingMobileInterstitialsProtoDesktopInterstitials desktopInterstitials;

  /**
   * 16-bit
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer domainAge;

  /**
   * Date for Events. A web page might list multiple events with different dates. We only take one
   * date (start date) per event.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.util.List<java.lang.Long> eventsDate;

  /**
   * This field is available only in the docjoins: it is cleared before building per-doc data in
   * both Mustang and Teragoogle. (MessageSet is inefficient in space for serving data) Use this for
   * all new fields that aren't needed during serving. Currently this field contains: * UrlSignals
   * for the document level spam classifier (when the doclevelspamscore is set). * PerDocLangidData
   * and realtimespam::ClassifierResult for the document level fresh spam classifier (when the doc-
   * level fresh spam score is generated). * MicroblogDocQualitySignals for document-level microblog
   * spam classifier. This only exists in Firebird for now. * spam_buckets::BucketsData for a
   * document-structure hash
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Proto2BridgeMessageSet extraData;

  /**
   * Contains Site signal information for Firefly ranking change. See http://ariane/313938 for more
   * details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityCopiaFireflySiteSignal fireflySiteSignal;

  /**
   * Stores scores of freshness-related classifiers: freshbox article score, live blog score and
   * host-level article score. The encoding/decoding API is in
   * quality/freshness/freshbox/goldmine/freshbox_annotation_encoder.h. To use this field, you MUST
   * join g/pq-classifiers-announce and add your use case at http://shortn/_RYXS2lX2IV.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Long freshboxArticleScores;

  /**
   * Stores freshness and aging related data, such as time-related quality metrics predicted from
   * url-pattern level signals. Use the encoding decoding API in
   * quality/freshness/docclassifier/aging/encoded-pattern-signals.h This field is deprecated.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long freshnessEncodedSignals;

  /**
   * Contains encoded FringeQueryPrior information. Unlikely to be meaningful for anyone other than
   * fringe-ranking team. Contact fringe-ranking team if any questions, but do NOT use directly
   * without consulting them.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityFringeFringeQueryPriorPerDocData fringeQueryPrior;

  /**
   * geo data; approx 24 bytes for 23M U.S. pages
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String geodata;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer homePageInfo;

  /**
   * The page-rank of the homepage of the site. Copied from the cdoc.doc().pagerank_ns() of the
   * homepage.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer homepagePagerankNs;

  /**
   * The earliest firstseen date of all pages in this host/domain. These data are used in twiddler
   * to sandbox fresh spam in serving time. It is 16 bit and the time is day number after
   * 2005-12-31, and all the previous time are set to 0. If this url's host_age == domain_age, then
   * omit domain_age Please use //spam/content/siteage-util.h to convert the day between epoch
   * second. Regarding usage of Sentinel values: We would like to check if a value exists in scoring
   * bundle while using in Ranklab AST. For this having a sentinel value will help us know if the
   * field exists or has a sentinel value (in the case it does not exist). 16-bit
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer hostAge;

  /**
   * Site rank computed for host-level sitechunks. This value encodes nsr, site_pr and new_nsr. See
   * quality_nsr::util::ConvertNsrDataToHostNsr and go/nsr.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Long hostNsr;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private ImagePerDocData imagedata;

  /**
   * This field indicates whether the document is in the newsstand corpus.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean inNewsstand;

  /**
   * Set by the FreshDocs instant doc joiner. See //indexing/instant/hotdocs/README and http://go
   * /freshdocs-hotdocs.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isHotdoc;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private KaltixPerDocData kaltixdata;

  /**
   * For indexing k'nex annotations for FreshDocs.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private SocialPersonalizationKnexAnnotation knexAnnotation;

  /**
   * Plausible languages in order of decreasing plausibility. Language values are small, IE < 127 so
   * this should compress to one byte each.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.Integer> languages;

  /**
   * Last significant update of the document. This is sourced from the
   * quality_timebased.LastSignificantUpdate proto as computed by the LSUSelector from various
   * signals. The value is a UNIX timestamp in seconds.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long lastSignificantUpdate;

  /**
   * Metadata about last significant update. Currently this only encodes the
   * quality_timebased.LastSignificantUpdate.source field which contains the info on the source of
   * the signal. NOTE: Please do not read the value directly. Use helpers from
   * quality/timebased/lastsignificantupdate/lsu-helper.h instead.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long lastSignificantUpdateInfo;

  /**
   * Info on how to launch a mobile app to consume this document's content, if applicable (see
   * go/calypso).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityRichsnippetsAppsProtosLaunchAppInfoPerDocData launchAppInfo;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private WeboftrustLiveResultsDocAttachments liveResultsData;

  /**
   * Information on localized clusters, which is the relationship of translated and/or localized
   * pages.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private IndexingDupsLocalizedLocalizedCluster localizedCluster;

  /**
   * Contains the mids of the 5 most topical entities annotated with selected KG collections. This
   * information is currently used on Image Search to detect cases where results converged to mostly
   * a single person or media entity. More details: go/result-set-convergence.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private ImageQualitySensitiveMediaOrPeopleEntities mediaOrPeopleEntities;

  /**
   * If not 0, we should not show the image in overlay mode in image snippets
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer noimageframeoverlayreason;

  /**
   * Stripped site-level signals, not present in the explicit nsr_* fields, nor
   * compressed_quality_signals.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityNsrNsrData nsrDataProto;

  /**
   * This field is propagated to shards. In addition, it is populated at serving time by go/web-
   * signal-joins.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean nsrIsCovidLocalAuthority;

  /**
   * This field is propagated to shards. It will also be populated at serving time by go/web-signal-
   * joins (see b/168114815).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean nsrIsElectionAuthority;

  /**
   * This field is propagated to shards. It will also be populated at serving time by go/web-signal-
   * joins (see b/170607253). Bit indicating whether this site is video-focused, but not hosted on
   * any major known video hosting domains.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean nsrIsVideoFocusedSite;

  /**
   * SiteChunk computed for nsr. It some cases it can use more information than just url (e.g.
   * youtube channels). See NsrAnnotator for details. If sitechunk is longer than
   * --populate_nsr_sitechunk_max_length (default=100), it will not get populated. This field might
   * be compressed and needs to be decoded with quality_nsr::util::DecodeNsrSitechunk. See go/nsr-
   * chunks for more details. This field contains only nontrivial primary chunks.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String nsrSitechunk;

  /**
   * Total number of urls encoded in the url section = # of alternate urls + 1
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer numUrls;

  /**
   * 28 bytes per page, only in the Ocean index
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private OceanPerDocData oceandata;

  /**
   * Onsite prominence measures the importance of the document within its site. It is computed by
   * propagating simulated traffic from the homepage and high craps click pages. It is a 13-bit int.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Long onsiteProminence;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer origin;

  /**
   * The number of hard tokens in the title.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer originalTitleHardTokenCount;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.Integer> pageTags;

  /**
   * Experimental pageranks (DEPRECATED; only pagerank in MustangBasicInfo is used).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float pagerank;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float pagerank0;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float pagerank1;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float pagerank2;

  /**
   * String that encodes the position ranges for different regions of the document. See
   * "indexer/pageregion.h" for an explanation, and how to decode the string
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String pageregions;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private PhilPerDocData phildata;

  /**
   * This field stores information about product sites.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityProductProductSiteData productSitesInfo;

  /**
   * The set of (query, country, language) triples for which this document is considered to be the
   * official page. For example, www.britneyspears.com would be official for ("britney spears",
   * "us", 0) and others (0 is English).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private OfficialPagesQuerySet queriesForWhichOfficial;

  /**
   * Top two document language BCP-47 codes as generated by the RosettaLanguageAnnotator in the
   * decreasing order of probability.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> rosettaLanguages;

  /**
   * Application information associated to the document.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private RepositoryAnnotationsRdfaRdfaRichSnippetsApplication rsApplication;

  /**
   * Primary video's audio language classified by S3 based Automatic Language Identification (only
   * for watch pages).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private S3AudioLanguageS3AudioLanguage s3AudioLanguage;

  /**
   * Top document language as generated by SAFT LangID. For now we store bare minimum: just the top
   * 1 language value, converted to the language enum, and only when different from the first value
   * in 'languages'.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.Integer> saftLanguageInt;

  /**
   * Selection tier rank is a language normalized score ranging from 0-32767 over the serving tier
   * (Base, Zeppelins, Landfills) for this document. This is converted back to fractional position
   * within the index tier by scaled_selection_tier_rank/32767.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer scaledSelectionTierRank;

  /**
   * Scholar/Science Document type: <0 == not a Science Document -- default 0 == Science doc fully
   * visible >0 == Science doc but limited visibility, the number is the visible terms
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer scienceDoctype;

  /**
   * Deprecated 2016/01/14.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.util.List<java.math.BigInteger> scienceHoldingsIds;

  /**
   * SemanticDate, estimated date of the content of a document based on the contents of the document
   * (via parsing), anchors and related documents. Date is encoded as a 32-bits UNIX date (1970 Jan
   * 1 epoch). Confidence is encoded using a SemanticDate specific format. For details of encoding,
   * please refer to quality/freshness/docclassifier/semanticdate/public/semantic_date.proto
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer semanticDate;

  /**
   * DEPRECATED: semantic_date_confidence replaced by semantic_date_info.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer semanticDateConfidence;

  /**
   * Info is encoded using a SemanticDate specific format. Contains confidence scores for
   * day/month/year components as well as various meta data required by the freshness twiddlers.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer semanticDateInfo;

  /**
   * A set of cluster ids which are generated in Alexandria and used to de-dup results at serving
   * time.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private IndexingDocjoinerServingTimeClusterIds servingTimeClusterIds;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private ShingleInfoPerDocData shingleInfo;

  /**
   * Additional metadata for smartphone documents in the Google index.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private SmartphonePerDocData smartphoneData;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer smearingMaxTotalOffdomainAnchors;

  /**
   * For Social Search we store the fingerprint of the SG node name. This is used in one of the
   * superroot's PRE_DOC twiddlers as a lookup key for the full Social Search data. PRE_DOC =
   * twiddlers firing before the DocInfo request is sent to the mustang backend.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.math.BigInteger socialgraphNodeNameFp;

  /**
   * Actions based on Cookbook recipes that match the page.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private SpamCookbookAction spamCookbookAction;

  /**
   * Contains hacked site signals which will be used in query time joins. As of Oct'19, the field is
   * stored in a separate corpus. It'll only be populated for in-flight requests between retrieve
   * and full-score in perdocdata. So no extra storage is needed on muppet side.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private SpamMuppetjoinsMuppetSignals spamMuppetSignals;

  /**
   * Site level scores coming from spambrain.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private SpamBrainData spambrainData;

  /**
   * The document total spam score identified by spambrain, going from 0 to 1.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float spambrainTotalDocSpamScore;

  /**
   * The spamrank measures the likelihood that this document links to known spammers. Its value is
   * between 0 and 65535.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer spamrank;

  /**
   * For SpamTokens content scores. Used in SiteBoostTwiddler to determine whether a page is UGC
   * Spam. See go/spamtokens-dd for details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float spamtokensContentScore;

  /**
   * Encoded Document Time Sensitivity signal.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Long timeSensitivity;

  /**
   * Number of hard tokens originally in title without counting the stopwords.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer titleHardTokenCountWithoutStopwords;

  /**
   * A copy of the value stored in /namespace/indexing/wwwglobal//fakepr for this document. A value
   * of quality_bakery::FakeprUtils::kUnknownToolbarPagerank indicates that we don't have toolbar
   * pagerank for this document. A value between 0 and 10 (inclusive) means that this is the toolbar
   * pagerank of the page. Finally, if this value is not set it means that the toolbar pagerank is
   * equivalent to: quality_bakery::FakeprUtils::EstimatePreDemotionFromPagerankNearestSeeds(
   * basic_info.pagerank_ns()) called on the MustangBasicInfo attachment for the same document.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer toolbarPagerank;

  /**
   * Top petacat of the site. Used in SiteboostTwiddler to determine result/query matching.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer topPetacatTaxId;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float topPetacatWeight;

  /**
   * This field stores information about good travel sites.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityTravelGoodSitesData travelGoodSitesInfo;

  /**
   * For now, the count of matching trendspam queries.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer trendspamScore;

  /**
   * This field is propagated to shards. Stores clustering information on a site level for the
   * Tundra project.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer tundraClusterId;

  /**
   * The uac spam score is represented in 7 bits, going from 0 to 127. Threshold is 64. Score >= 64
   * is considered as uac spam.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer uacSpamScore;

  /**
   * These two fingerprints are used for de-duping results in a twiddler. They should only be
   * populated by freshdocs, and will only be present for documents that are chosen to be canonicals
   * in a cluster whose previous canonical is also in the index. Additionally,
   * url_after_redirects_fp is only present if it is different from a fingerprint of the URL.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.math.BigInteger urlAfterRedirectsFp;

  /**
   * Contains url poisoning data for suppressing spam documents.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private UrlPoisoningData urlPoisoningData;

  /**
   * For indexing v2 k'nex, see/go/knex-v2-doc-annotation for details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualitySherlockKnexAnnotation v2KnexAnnotation;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.math.BigInteger videoCorpusDocid;

  /**
   * Audio-based language classified by Automatic Language Identification (only for watch pages).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityVidyaVideoLanguageVideoLanguage videoLanguage;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VideoPerDocData videodata;

  /**
   * Contains page UX signals for VOLT ranking change. See http://ariane/4025970 for more details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private IndexingMobileVoltVoltPerDocData voltData;

  /**
   * Language classified by the WatchPageLanguage Model (go/watchpage-language). Only present for
   * watch pages.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private WatchpageLanguageWatchPageLanguageResult watchpageLanguageResult;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.math.BigInteger webmirrorEcnFp;

  /**
   * WebRef entities associated to the document. See go/webref for details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private RepositoryWebrefWebrefMustangAttachment webrefEntities;

  /**
   * Stores scores of ymyl health classifier as defined at go/ymyl-classifier-dd. To use this field,
   * you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_nfg9oAldou.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Long ymylHealthScore;

  /**
   * Stores scores of ymyl news classifier as defined at go/ymyl-classifier-dd. To use this field,
   * you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_nfg9oAldou.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Long ymylNewsScore;

  /**
   * @return value or {@code null} for none
   */
  public BlogPerDocData getBlogData() {
    return blogData;
  }

  /**
   * @param blogData blogData or {@code null} for none
   */
  public PerDocData setBlogData(BlogPerDocData blogData) {
    this.blogData = blogData;
    return this;
  }

  /**
   * the book citation data for each web page, the average size is about 10 bytes
   * @return value or {@code null} for none
   */
  public BookCitationPerDocData getBookCitationData() {
    return bookCitationData;
  }

  /**
   * the book citation data for each web page, the average size is about 10 bytes
   * @param bookCitationData bookCitationData or {@code null} for none
   */
  public PerDocData setBookCitationData(BookCitationPerDocData bookCitationData) {
    this.bookCitationData = bookCitationData;
    return this;
  }

  /**
   * The obfuscated google profile gaia id(s) of the author(s) of the document. This field is
   * deprecated, use the string version.
   * @return value or {@code null} for none
   */
  public java.util.List<java.math.BigInteger> getDEPRECATEDAuthorObfuscatedGaia() {
    return dEPRECATEDAuthorObfuscatedGaia;
  }

  /**
   * The obfuscated google profile gaia id(s) of the author(s) of the document. This field is
   * deprecated, use the string version.
   * @param dEPRECATEDAuthorObfuscatedGaia dEPRECATEDAuthorObfuscatedGaia or {@code null} for none
   */
  public PerDocData setDEPRECATEDAuthorObfuscatedGaia(java.util.List<java.math.BigInteger> dEPRECATEDAuthorObfuscatedGaia) {
    this.dEPRECATEDAuthorObfuscatedGaia = dEPRECATEDAuthorObfuscatedGaia;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getDEPRECATEDQuarantineWhitelist() {
    return dEPRECATEDQuarantineWhitelist;
  }

  /**
   * @param dEPRECATEDQuarantineWhitelist dEPRECATEDQuarantineWhitelist or {@code null} for none
   */
  public PerDocData setDEPRECATEDQuarantineWhitelist(java.lang.Boolean dEPRECATEDQuarantineWhitelist) {
    this.dEPRECATEDQuarantineWhitelist = dEPRECATEDQuarantineWhitelist;
    return this;
  }

  /**
   * The document spam score is represented as a 7-bits, going from 0 to 127.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getDocLevelSpamScore() {
    return docLevelSpamScore;
  }

  /**
   * The document spam score is represented as a 7-bits, going from 0 to 127.
   * @param docLevelSpamScore docLevelSpamScore or {@code null} for none
   */
  public PerDocData setDocLevelSpamScore(java.lang.Integer docLevelSpamScore) {
    this.docLevelSpamScore = docLevelSpamScore;
    return this;
  }

  /**
   * Free form debug info. NB2: consider carefully what to save here. It's easy to eat lots of gfs
   * space with debug info that nobody needs...
   * @return value or {@code null} for none
   */
  public java.util.List<PerDocDebugEvent> getEvent() {
    return event;
  }

  /**
   * Free form debug info. NB2: consider carefully what to save here. It's easy to eat lots of gfs
   * space with debug info that nobody needs...
   * @param event event or {@code null} for none
   */
  public PerDocData setEvent(java.util.List<PerDocDebugEvent> event) {
    this.event = event;
    return this;
  }

  /**
   * The gibberish score is represented in 7 bits, going from 0 to 127.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getGibberishScore() {
    return gibberishScore;
  }

  /**
   * The gibberish score is represented in 7 bits, going from 0 to 127.
   * @param gibberishScore gibberishScore or {@code null} for none
   */
  public PerDocData setGibberishScore(java.lang.Integer gibberishScore) {
    this.gibberishScore = gibberishScore;
    return this;
  }

  /**
   * 16 bytes of groups2 data: used only in groups2 index
   * @return value or {@code null} for none
   */
  public GroupsPerDocData getGroupsData() {
    return groupsData;
  }

  /**
   * 16 bytes of groups2 data: used only in groups2 index
   * @param groupsData groupsData or {@code null} for none
   */
  public PerDocData setGroupsData(GroupsPerDocData groupsData) {
    this.groupsData = groupsData;
    return this;
  }

  /**
   * Is this document considered spam by the anchor bayes classifier?
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsAnchorBayesSpam() {
    return isAnchorBayesSpam;
  }

  /**
   * Is this document considered spam by the anchor bayes classifier?
   * @param isAnchorBayesSpam isAnchorBayesSpam or {@code null} for none
   */
  public PerDocData setIsAnchorBayesSpam(java.lang.Boolean isAnchorBayesSpam) {
    this.isAnchorBayesSpam = isAnchorBayesSpam;
    return this;
  }

  /**
   * The keyword stuffing score is represented in 7 bits, going from 0 to 127.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getKeywordStuffingScore() {
    return keywordStuffingScore;
  }

  /**
   * The keyword stuffing score is represented in 7 bits, going from 0 to 127.
   * @param keywordStuffingScore keywordStuffingScore or {@code null} for none
   */
  public PerDocData setKeywordStuffingScore(java.lang.Integer keywordStuffingScore) {
    this.keywordStuffingScore = keywordStuffingScore;
    return this;
  }

  /**
   * Additional metadata for lowend mobile documents in the Google index.
   * @return value or {@code null} for none
   */
  public MobilePerDocData getMobileData() {
    return mobileData;
  }

  /**
   * Additional metadata for lowend mobile documents in the Google index.
   * @param mobileData mobileData or {@code null} for none
   */
  public PerDocData setMobileData(MobilePerDocData mobileData) {
    this.mobileData = mobileData;
    return this;
  }

  /**
   * The original content score is represented as a 7-bits, going from 0 to 127. Only pages with
   * little content have this field. The actual original content score ranges from 0 to 512. It is
   * encoded with quality_q2::OriginalContentUtil::EncodeOriginalContentScore(). To decode the
   * value, use quality_q2::OriginalContentUtil::DecodeOriginalContentScore().
   * @return value or {@code null} for none
   */
  public java.lang.Integer getOriginalContentScore() {
    return originalContentScore;
  }

  /**
   * The original content score is represented as a 7-bits, going from 0 to 127. Only pages with
   * little content have this field. The actual original content score ranges from 0 to 512. It is
   * encoded with quality_q2::OriginalContentUtil::EncodeOriginalContentScore(). To decode the
   * value, use quality_q2::OriginalContentUtil::DecodeOriginalContentScore().
   * @param originalContentScore originalContentScore or {@code null} for none
   */
  public PerDocData setOriginalContentScore(java.lang.Integer originalContentScore) {
    this.originalContentScore = originalContentScore;
    return this;
  }

  /**
   * Additional metadata for Premium document in the Google index.
   * @return value or {@code null} for none
   */
  public PremiumPerDocData getPremiumData() {
    return premiumData;
  }

  /**
   * Additional metadata for Premium document in the Google index.
   * @param premiumData premiumData or {@code null} for none
   */
  public PerDocData setPremiumData(PremiumPerDocData premiumData) {
    this.premiumData = premiumData;
    return this;
  }

  /**
   * bitmask of QuarantineBits (or'd together) used to store quarantine related information. For
   * example: QUARANTINE_WHITELIST | QUARANTINE_URLINURL.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getQuarantineInfo() {
    return quarantineInfo;
  }

  /**
   * bitmask of QuarantineBits (or'd together) used to store quarantine related information. For
   * example: QUARANTINE_WHITELIST | QUARANTINE_URLINURL.
   * @param quarantineInfo quarantineInfo or {@code null} for none
   */
  public PerDocData setQuarantineInfo(java.lang.Integer quarantineInfo) {
    this.quarantineInfo = quarantineInfo;
    return this;
  }

  /**
   * DEPRECATED ---------------------------------------------------------------- Please do not use
   * these fields in any new code. experimental
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScaledExptIndyRank() {
    return scaledExptIndyRank;
  }

  /**
   * DEPRECATED ---------------------------------------------------------------- Please do not use
   * these fields in any new code. experimental
   * @param scaledExptIndyRank scaledExptIndyRank or {@code null} for none
   */
  public PerDocData setScaledExptIndyRank(java.lang.Integer scaledExptIndyRank) {
    this.scaledExptIndyRank = scaledExptIndyRank;
    return this;
  }

  /**
   * experimental
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScaledExptIndyRank2() {
    return scaledExptIndyRank2;
  }

  /**
   * experimental
   * @param scaledExptIndyRank2 scaledExptIndyRank2 or {@code null} for none
   */
  public PerDocData setScaledExptIndyRank2(java.lang.Integer scaledExptIndyRank2) {
    this.scaledExptIndyRank2 = scaledExptIndyRank2;
    return this;
  }

  /**
   * experimental
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScaledExptIndyRank3() {
    return scaledExptIndyRank3;
  }

  /**
   * experimental
   * @param scaledExptIndyRank3 scaledExptIndyRank3 or {@code null} for none
   */
  public PerDocData setScaledExptIndyRank3(java.lang.Integer scaledExptIndyRank3) {
    this.scaledExptIndyRank3 = scaledExptIndyRank3;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScaledExptSpamScoreEric() {
    return scaledExptSpamScoreEric;
  }

  /**
   * @param scaledExptSpamScoreEric scaledExptSpamScoreEric or {@code null} for none
   */
  public PerDocData setScaledExptSpamScoreEric(java.lang.Integer scaledExptSpamScoreEric) {
    this.scaledExptSpamScoreEric = scaledExptSpamScoreEric;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScaledExptSpamScoreYoram() {
    return scaledExptSpamScoreYoram;
  }

  /**
   * @param scaledExptSpamScoreYoram scaledExptSpamScoreYoram or {@code null} for none
   */
  public PerDocData setScaledExptSpamScoreYoram(java.lang.Integer scaledExptSpamScoreYoram) {
    this.scaledExptSpamScoreYoram = scaledExptSpamScoreYoram;
    return this;
  }

  /**
   * The independence rank is represented as a 16-bit integer, which is multiplied by (max_indy_rank
   * / 65536) to produce actual independence rank values. max_indy_rank is typically 0.84.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScaledIndyRank() {
    return scaledIndyRank;
  }

  /**
   * The independence rank is represented as a 16-bit integer, which is multiplied by (max_indy_rank
   * / 65536) to produce actual independence rank values. max_indy_rank is typically 0.84.
   * @param scaledIndyRank scaledIndyRank or {@code null} for none
   */
  public PerDocData setScaledIndyRank(java.lang.Integer scaledIndyRank) {
    this.scaledIndyRank = scaledIndyRank;
    return this;
  }

  /**
   * End DEPRECATED ------------------------------------------------------------ Link age score is
   * represented as a 7-bit integer, going from 0 to 127.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScaledLinkAgeSpamScore() {
    return scaledLinkAgeSpamScore;
  }

  /**
   * End DEPRECATED ------------------------------------------------------------ Link age score is
   * represented as a 7-bit integer, going from 0 to 127.
   * @param scaledLinkAgeSpamScore scaledLinkAgeSpamScore or {@code null} for none
   */
  public PerDocData setScaledLinkAgeSpamScore(java.lang.Integer scaledLinkAgeSpamScore) {
    this.scaledLinkAgeSpamScore = scaledLinkAgeSpamScore;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScaledSpamScoreEric() {
    return scaledSpamScoreEric;
  }

  /**
   * @param scaledSpamScoreEric scaledSpamScoreEric or {@code null} for none
   */
  public PerDocData setScaledSpamScoreEric(java.lang.Integer scaledSpamScoreEric) {
    this.scaledSpamScoreEric = scaledSpamScoreEric;
    return this;
  }

  /**
   * Spamscores are represented as a 7-bit integer, going from 0 to 127.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScaledSpamScoreYoram() {
    return scaledSpamScoreYoram;
  }

  /**
   * Spamscores are represented as a 7-bit integer, going from 0 to 127.
   * @param scaledSpamScoreYoram scaledSpamScoreYoram or {@code null} for none
   */
  public PerDocData setScaledSpamScoreYoram(java.lang.Integer scaledSpamScoreYoram) {
    this.scaledSpamScoreYoram = scaledSpamScoreYoram;
    return this;
  }

  /**
   * The spamword score is represented in 7-bits, going from 0 to 127.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getSpamWordScore() {
    return spamWordScore;
  }

  /**
   * The spamword score is represented in 7-bits, going from 0 to 127.
   * @param spamWordScore spamWordScore or {@code null} for none
   */
  public PerDocData setSpamWordScore(java.lang.Integer spamWordScore) {
    this.spamWordScore = spamWordScore;
    return this;
  }

  /**
   * Tag-site-ness of a page, repesented in 7-bits range from 0 to 100. Smaller value means worse
   * tag page.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getTagPageScore() {
    return tagPageScore;
  }

  /**
   * Tag-site-ness of a page, repesented in 7-bits range from 0 to 100. Smaller value means worse
   * tag page.
   * @param tagPageScore tagPageScore or {@code null} for none
   */
  public PerDocData setTagPageScore(java.lang.Integer tagPageScore) {
    this.tagPageScore = tagPageScore;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public ToolBarPerDocData getToolBarData() {
    return toolBarData;
  }

  /**
   * @param toolBarData toolBarData or {@code null} for none
   */
  public PerDocData setToolBarData(ToolBarPerDocData toolBarData) {
    this.toolBarData = toolBarData;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getWhirlpoolDiscount() {
    return whirlpoolDiscount;
  }

  /**
   * @param whirlpoolDiscount whirlpoolDiscount or {@code null} for none
   */
  public PerDocData setWhirlpoolDiscount(java.lang.Float whirlpoolDiscount) {
    this.whirlpoolDiscount = whirlpoolDiscount;
    return this;
  }

  /**
   * AppsLink contains Android application IDs in outlinks. It is used to improve results ranking
   * within applications universal. See http://go/apps-universal for the project details.
   * @return value or {@code null} for none
   */
  public QualityCalypsoAppsLink getAppsLink() {
    return appsLink;
  }

  /**
   * AppsLink contains Android application IDs in outlinks. It is used to improve results ranking
   * within applications universal. See http://go/apps-universal for the project details.
   * @param appsLink appsLink or {@code null} for none
   */
  public PerDocData setAppsLink(QualityCalypsoAppsLink appsLink) {
    this.appsLink = appsLink;
    return this;
  }

  /**
   * For indexing Asteroid Belt intent scores. See go/asteroid-belt for details.
   * @return value or {@code null} for none
   */
  public QualityOrbitAsteroidBeltDocumentIntentScores getAsteroidBeltIntents() {
    return asteroidBeltIntents;
  }

  /**
   * For indexing Asteroid Belt intent scores. See go/asteroid-belt for details.
   * @param asteroidBeltIntents asteroidBeltIntents or {@code null} for none
   */
  public PerDocData setAsteroidBeltIntents(QualityOrbitAsteroidBeltDocumentIntentScores asteroidBeltIntents) {
    this.asteroidBeltIntents = asteroidBeltIntents;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getAuthorObfuscatedGaiaStr() {
    return authorObfuscatedGaiaStr;
  }

  /**
   * @param authorObfuscatedGaiaStr authorObfuscatedGaiaStr or {@code null} for none
   */
  public PerDocData setAuthorObfuscatedGaiaStr(java.util.List<java.lang.String> authorObfuscatedGaiaStr) {
    this.authorObfuscatedGaiaStr = authorObfuscatedGaiaStr;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public BiasingPerDocData getBiasingdata() {
    return biasingdata;
  }

  /**
   * @param biasingdata biasingdata or {@code null} for none
   */
  public PerDocData setBiasingdata(BiasingPerDocData biasingdata) {
    this.biasingdata = biasingdata;
    return this;
  }

  /**
   * A replacement for BiasingPerDocData that is more space efficient. Once this is live everywhere,
   * biasingdata will be deprecated.
   * @return value or {@code null} for none
   */
  public BiasingPerDocData2 getBiasingdata2() {
    return biasingdata2;
  }

  /**
   * A replacement for BiasingPerDocData that is more space efficient. Once this is live everywhere,
   * biasingdata will be deprecated.
   * @param biasingdata2 biasingdata2 or {@code null} for none
   */
  public PerDocData setBiasingdata2(BiasingPerDocData2 biasingdata2) {
    this.biasingdata2 = biasingdata2;
    return this;
  }

  /**
   * The body words over tokens ratios for the beginning part and whole doc. NB: To save space,
   * field body_words_to_tokens_ratio_total is not set if it has the same value as
   * body_words_to_tokens_ratio_begin (e.g., short docs).
   * @return value or {@code null} for none
   */
  public java.lang.Float getBodyWordsToTokensRatioBegin() {
    return bodyWordsToTokensRatioBegin;
  }

  /**
   * The body words over tokens ratios for the beginning part and whole doc. NB: To save space,
   * field body_words_to_tokens_ratio_total is not set if it has the same value as
   * body_words_to_tokens_ratio_begin (e.g., short docs).
   * @param bodyWordsToTokensRatioBegin bodyWordsToTokensRatioBegin or {@code null} for none
   */
  public PerDocData setBodyWordsToTokensRatioBegin(java.lang.Float bodyWordsToTokensRatioBegin) {
    this.bodyWordsToTokensRatioBegin = bodyWordsToTokensRatioBegin;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getBodyWordsToTokensRatioTotal() {
    return bodyWordsToTokensRatioTotal;
  }

  /**
   * @param bodyWordsToTokensRatioTotal bodyWordsToTokensRatioTotal or {@code null} for none
   */
  public PerDocData setBodyWordsToTokensRatioTotal(java.lang.Float bodyWordsToTokensRatioTotal) {
    this.bodyWordsToTokensRatioTotal = bodyWordsToTokensRatioTotal;
    return this;
  }

  /**
   * Brainloc contains location information for the document. See ariane/273189 for details.
   * @return value or {@code null} for none
   */
  public QualityGeoBrainlocBrainlocAttachment getBrainloc() {
    return brainloc;
  }

  /**
   * Brainloc contains location information for the document. See ariane/273189 for details.
   * @param brainloc brainloc or {@code null} for none
   */
  public PerDocData setBrainloc(QualityGeoBrainlocBrainlocAttachment brainloc) {
    this.brainloc = brainloc;
    return this;
  }

  /**
   * A measure of commerciality of the document Score > 0 indicates document is commercial (i.e.
   * sells something) Computed by repository/pageclassifiers/parsehandler-commercial.cc
   * @return value or {@code null} for none
   */
  public java.lang.Float getCommercialScore() {
    return commercialScore;
  }

  /**
   * A measure of commerciality of the document Score > 0 indicates document is commercial (i.e.
   * sells something) Computed by repository/pageclassifiers/parsehandler-commercial.cc
   * @param commercialScore commercialScore or {@code null} for none
   */
  public PerDocData setCommercialScore(java.lang.Float commercialScore) {
    this.commercialScore = commercialScore;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public CompressedQualitySignals getCompressedQualitySignals() {
    return compressedQualitySignals;
  }

  /**
   * @param compressedQualitySignals compressedQualitySignals or {@code null} for none
   */
  public PerDocData setCompressedQualitySignals(CompressedQualitySignals compressedQualitySignals) {
    this.compressedQualitySignals = compressedQualitySignals;
    return this;
  }

  /**
   * Compressed URL string used for SETI.
   * @see #decodeCompressedUrl()
   * @return value or {@code null} for none
   */
  public java.lang.String getCompressedUrl() {
    return compressedUrl;
  }

  /**
   * Compressed URL string used for SETI.
   * @see #getCompressedUrl()
   * @return Base64 decoded value or {@code null} for none
   *
   * @since 1.14
   */
  public byte[] decodeCompressedUrl() {
    return com.google.api.client.util.Base64.decodeBase64(compressedUrl);
  }

  /**
   * Compressed URL string used for SETI.
   * @see #encodeCompressedUrl()
   * @param compressedUrl compressedUrl or {@code null} for none
   */
  public PerDocData setCompressedUrl(java.lang.String compressedUrl) {
    this.compressedUrl = compressedUrl;
    return this;
  }

  /**
   * Compressed URL string used for SETI.
   * @see #setCompressedUrl()
   *
   * <p>
   * The value is encoded Base64 or {@code null} for none.
   * </p>
   *
   * @since 1.14
   */
  public PerDocData encodeCompressedUrl(byte[] compressedUrl) {
    this.compressedUrl = com.google.api.client.util.Base64.encodeBase64URLSafeString(compressedUrl);
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public ContentAttributions getContentAttributions() {
    return contentAttributions;
  }

  /**
   * @param contentAttributions contentAttributions or {@code null} for none
   */
  public PerDocData setContentAttributions(ContentAttributions contentAttributions) {
    this.contentAttributions = contentAttributions;
    return this;
  }

  /**
   * This field stores the country information for the document in the form of CountryAttachment.
   * @return value or {@code null} for none
   */
  public CountryCountryAttachment getCountryInfo() {
    return countryInfo;
  }

  /**
   * This field stores the country information for the document in the form of CountryAttachment.
   * @param countryInfo countryInfo or {@code null} for none
   */
  public PerDocData setCountryInfo(CountryCountryAttachment countryInfo) {
    this.countryInfo = countryInfo;
    return this;
  }

  /**
   * This field is used internally by the docjoiner to forward the crawl pageranks from original
   * canonicals to canonicals we actually chose; outside sources should not set it, and it should
   * not be present in actual docjoins or the index.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getCrawlPagerank() {
    return crawlPagerank;
  }

  /**
   * This field is used internally by the docjoiner to forward the crawl pageranks from original
   * canonicals to canonicals we actually chose; outside sources should not set it, and it should
   * not be present in actual docjoins or the index.
   * @param crawlPagerank crawlPagerank or {@code null} for none
   */
  public PerDocData setCrawlPagerank(java.lang.Integer crawlPagerank) {
    this.crawlPagerank = crawlPagerank;
    return this;
  }

  /**
   * For crawler-ID variations, the crawling context applied to the document. See go/url, and the
   * description in google3/indexing/crawler_id
   * @return value or {@code null} for none
   */
  public LogsProtoIndexingCrawlerIdCrawlerIdProto getCrawlerIdProto() {
    return crawlerIdProto;
  }

  /**
   * For crawler-ID variations, the crawling context applied to the document. See go/url, and the
   * description in google3/indexing/crawler_id
   * @param crawlerIdProto crawlerIdProto or {@code null} for none
   */
  public PerDocData setCrawlerIdProto(LogsProtoIndexingCrawlerIdCrawlerIdProto crawlerIdProto) {
    this.crawlerIdProto = crawlerIdProto;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public CrowdingPerDocData getCrowdingdata() {
    return crowdingdata;
  }

  /**
   * @param crowdingdata crowdingdata or {@code null} for none
   */
  public PerDocData setCrowdingdata(CrowdingPerDocData crowdingdata) {
    this.crowdingdata = crowdingdata;
    return this;
  }

  /**
   * Stores dates-related info (e.g. page is old based on its date annotations). Used in
   * FreshnessTwiddler. Use encode/decode functions from quality/timebased/utils/dates-info-helper-
   * inl.h
   * @return value or {@code null} for none
   */
  public java.lang.Long getDatesInfo() {
    return datesInfo;
  }

  /**
   * Stores dates-related info (e.g. page is old based on its date annotations). Used in
   * FreshnessTwiddler. Use encode/decode functions from quality/timebased/utils/dates-info-helper-
   * inl.h
   * @param datesInfo datesInfo or {@code null} for none
   */
  public PerDocData setDatesInfo(java.lang.Long datesInfo) {
    this.datesInfo = datesInfo;
    return this;
  }

  /**
   * Contains desktop interstitials signal for VOLT ranking change.
   * @return value or {@code null} for none
   */
  public IndexingMobileInterstitialsProtoDesktopInterstitials getDesktopInterstitials() {
    return desktopInterstitials;
  }

  /**
   * Contains desktop interstitials signal for VOLT ranking change.
   * @param desktopInterstitials desktopInterstitials or {@code null} for none
   */
  public PerDocData setDesktopInterstitials(IndexingMobileInterstitialsProtoDesktopInterstitials desktopInterstitials) {
    this.desktopInterstitials = desktopInterstitials;
    return this;
  }

  /**
   * 16-bit
   * @return value or {@code null} for none
   */
  public java.lang.Integer getDomainAge() {
    return domainAge;
  }

  /**
   * 16-bit
   * @param domainAge domainAge or {@code null} for none
   */
  public PerDocData setDomainAge(java.lang.Integer domainAge) {
    this.domainAge = domainAge;
    return this;
  }

  /**
   * Date for Events. A web page might list multiple events with different dates. We only take one
   * date (start date) per event.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.Long> getEventsDate() {
    return eventsDate;
  }

  /**
   * Date for Events. A web page might list multiple events with different dates. We only take one
   * date (start date) per event.
   * @param eventsDate eventsDate or {@code null} for none
   */
  public PerDocData setEventsDate(java.util.List<java.lang.Long> eventsDate) {
    this.eventsDate = eventsDate;
    return this;
  }

  /**
   * This field is available only in the docjoins: it is cleared before building per-doc data in
   * both Mustang and Teragoogle. (MessageSet is inefficient in space for serving data) Use this for
   * all new fields that aren't needed during serving. Currently this field contains: * UrlSignals
   * for the document level spam classifier (when the doclevelspamscore is set). * PerDocLangidData
   * and realtimespam::ClassifierResult for the document level fresh spam classifier (when the doc-
   * level fresh spam score is generated). * MicroblogDocQualitySignals for document-level microblog
   * spam classifier. This only exists in Firebird for now. * spam_buckets::BucketsData for a
   * document-structure hash
   * @return value or {@code null} for none
   */
  public Proto2BridgeMessageSet getExtraData() {
    return extraData;
  }

  /**
   * This field is available only in the docjoins: it is cleared before building per-doc data in
   * both Mustang and Teragoogle. (MessageSet is inefficient in space for serving data) Use this for
   * all new fields that aren't needed during serving. Currently this field contains: * UrlSignals
   * for the document level spam classifier (when the doclevelspamscore is set). * PerDocLangidData
   * and realtimespam::ClassifierResult for the document level fresh spam classifier (when the doc-
   * level fresh spam score is generated). * MicroblogDocQualitySignals for document-level microblog
   * spam classifier. This only exists in Firebird for now. * spam_buckets::BucketsData for a
   * document-structure hash
   * @param extraData extraData or {@code null} for none
   */
  public PerDocData setExtraData(Proto2BridgeMessageSet extraData) {
    this.extraData = extraData;
    return this;
  }

  /**
   * Contains Site signal information for Firefly ranking change. See http://ariane/313938 for more
   * details.
   * @return value or {@code null} for none
   */
  public QualityCopiaFireflySiteSignal getFireflySiteSignal() {
    return fireflySiteSignal;
  }

  /**
   * Contains Site signal information for Firefly ranking change. See http://ariane/313938 for more
   * details.
   * @param fireflySiteSignal fireflySiteSignal or {@code null} for none
   */
  public PerDocData setFireflySiteSignal(QualityCopiaFireflySiteSignal fireflySiteSignal) {
    this.fireflySiteSignal = fireflySiteSignal;
    return this;
  }

  /**
   * Stores scores of freshness-related classifiers: freshbox article score, live blog score and
   * host-level article score. The encoding/decoding API is in
   * quality/freshness/freshbox/goldmine/freshbox_annotation_encoder.h. To use this field, you MUST
   * join g/pq-classifiers-announce and add your use case at http://shortn/_RYXS2lX2IV.
   * @return value or {@code null} for none
   */
  public java.lang.Long getFreshboxArticleScores() {
    return freshboxArticleScores;
  }

  /**
   * Stores scores of freshness-related classifiers: freshbox article score, live blog score and
   * host-level article score. The encoding/decoding API is in
   * quality/freshness/freshbox/goldmine/freshbox_annotation_encoder.h. To use this field, you MUST
   * join g/pq-classifiers-announce and add your use case at http://shortn/_RYXS2lX2IV.
   * @param freshboxArticleScores freshboxArticleScores or {@code null} for none
   */
  public PerDocData setFreshboxArticleScores(java.lang.Long freshboxArticleScores) {
    this.freshboxArticleScores = freshboxArticleScores;
    return this;
  }

  /**
   * Stores freshness and aging related data, such as time-related quality metrics predicted from
   * url-pattern level signals. Use the encoding decoding API in
   * quality/freshness/docclassifier/aging/encoded-pattern-signals.h This field is deprecated.
   * @return value or {@code null} for none
   */
  public java.lang.Long getFreshnessEncodedSignals() {
    return freshnessEncodedSignals;
  }

  /**
   * Stores freshness and aging related data, such as time-related quality metrics predicted from
   * url-pattern level signals. Use the encoding decoding API in
   * quality/freshness/docclassifier/aging/encoded-pattern-signals.h This field is deprecated.
   * @param freshnessEncodedSignals freshnessEncodedSignals or {@code null} for none
   */
  public PerDocData setFreshnessEncodedSignals(java.lang.Long freshnessEncodedSignals) {
    this.freshnessEncodedSignals = freshnessEncodedSignals;
    return this;
  }

  /**
   * Contains encoded FringeQueryPrior information. Unlikely to be meaningful for anyone other than
   * fringe-ranking team. Contact fringe-ranking team if any questions, but do NOT use directly
   * without consulting them.
   * @return value or {@code null} for none
   */
  public QualityFringeFringeQueryPriorPerDocData getFringeQueryPrior() {
    return fringeQueryPrior;
  }

  /**
   * Contains encoded FringeQueryPrior information. Unlikely to be meaningful for anyone other than
   * fringe-ranking team. Contact fringe-ranking team if any questions, but do NOT use directly
   * without consulting them.
   * @param fringeQueryPrior fringeQueryPrior or {@code null} for none
   */
  public PerDocData setFringeQueryPrior(QualityFringeFringeQueryPriorPerDocData fringeQueryPrior) {
    this.fringeQueryPrior = fringeQueryPrior;
    return this;
  }

  /**
   * geo data; approx 24 bytes for 23M U.S. pages
   * @return value or {@code null} for none
   */
  public java.lang.String getGeodata() {
    return geodata;
  }

  /**
   * geo data; approx 24 bytes for 23M U.S. pages
   * @param geodata geodata or {@code null} for none
   */
  public PerDocData setGeodata(java.lang.String geodata) {
    this.geodata = geodata;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getHomePageInfo() {
    return homePageInfo;
  }

  /**
   * @param homePageInfo homePageInfo or {@code null} for none
   */
  public PerDocData setHomePageInfo(java.lang.Integer homePageInfo) {
    this.homePageInfo = homePageInfo;
    return this;
  }

  /**
   * The page-rank of the homepage of the site. Copied from the cdoc.doc().pagerank_ns() of the
   * homepage.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getHomepagePagerankNs() {
    return homepagePagerankNs;
  }

  /**
   * The page-rank of the homepage of the site. Copied from the cdoc.doc().pagerank_ns() of the
   * homepage.
   * @param homepagePagerankNs homepagePagerankNs or {@code null} for none
   */
  public PerDocData setHomepagePagerankNs(java.lang.Integer homepagePagerankNs) {
    this.homepagePagerankNs = homepagePagerankNs;
    return this;
  }

  /**
   * The earliest firstseen date of all pages in this host/domain. These data are used in twiddler
   * to sandbox fresh spam in serving time. It is 16 bit and the time is day number after
   * 2005-12-31, and all the previous time are set to 0. If this url's host_age == domain_age, then
   * omit domain_age Please use //spam/content/siteage-util.h to convert the day between epoch
   * second. Regarding usage of Sentinel values: We would like to check if a value exists in scoring
   * bundle while using in Ranklab AST. For this having a sentinel value will help us know if the
   * field exists or has a sentinel value (in the case it does not exist). 16-bit
   * @return value or {@code null} for none
   */
  public java.lang.Integer getHostAge() {
    return hostAge;
  }

  /**
   * The earliest firstseen date of all pages in this host/domain. These data are used in twiddler
   * to sandbox fresh spam in serving time. It is 16 bit and the time is day number after
   * 2005-12-31, and all the previous time are set to 0. If this url's host_age == domain_age, then
   * omit domain_age Please use //spam/content/siteage-util.h to convert the day between epoch
   * second. Regarding usage of Sentinel values: We would like to check if a value exists in scoring
   * bundle while using in Ranklab AST. For this having a sentinel value will help us know if the
   * field exists or has a sentinel value (in the case it does not exist). 16-bit
   * @param hostAge hostAge or {@code null} for none
   */
  public PerDocData setHostAge(java.lang.Integer hostAge) {
    this.hostAge = hostAge;
    return this;
  }

  /**
   * Site rank computed for host-level sitechunks. This value encodes nsr, site_pr and new_nsr. See
   * quality_nsr::util::ConvertNsrDataToHostNsr and go/nsr.
   * @return value or {@code null} for none
   */
  public java.lang.Long getHostNsr() {
    return hostNsr;
  }

  /**
   * Site rank computed for host-level sitechunks. This value encodes nsr, site_pr and new_nsr. See
   * quality_nsr::util::ConvertNsrDataToHostNsr and go/nsr.
   * @param hostNsr hostNsr or {@code null} for none
   */
  public PerDocData setHostNsr(java.lang.Long hostNsr) {
    this.hostNsr = hostNsr;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public ImagePerDocData getImagedata() {
    return imagedata;
  }

  /**
   * @param imagedata imagedata or {@code null} for none
   */
  public PerDocData setImagedata(ImagePerDocData imagedata) {
    this.imagedata = imagedata;
    return this;
  }

  /**
   * This field indicates whether the document is in the newsstand corpus.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getInNewsstand() {
    return inNewsstand;
  }

  /**
   * This field indicates whether the document is in the newsstand corpus.
   * @param inNewsstand inNewsstand or {@code null} for none
   */
  public PerDocData setInNewsstand(java.lang.Boolean inNewsstand) {
    this.inNewsstand = inNewsstand;
    return this;
  }

  /**
   * Set by the FreshDocs instant doc joiner. See //indexing/instant/hotdocs/README and http://go
   * /freshdocs-hotdocs.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsHotdoc() {
    return isHotdoc;
  }

  /**
   * Set by the FreshDocs instant doc joiner. See //indexing/instant/hotdocs/README and http://go
   * /freshdocs-hotdocs.
   * @param isHotdoc isHotdoc or {@code null} for none
   */
  public PerDocData setIsHotdoc(java.lang.Boolean isHotdoc) {
    this.isHotdoc = isHotdoc;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public KaltixPerDocData getKaltixdata() {
    return kaltixdata;
  }

  /**
   * @param kaltixdata kaltixdata or {@code null} for none
   */
  public PerDocData setKaltixdata(KaltixPerDocData kaltixdata) {
    this.kaltixdata = kaltixdata;
    return this;
  }

  /**
   * For indexing k'nex annotations for FreshDocs.
   * @return value or {@code null} for none
   */
  public SocialPersonalizationKnexAnnotation getKnexAnnotation() {
    return knexAnnotation;
  }

  /**
   * For indexing k'nex annotations for FreshDocs.
   * @param knexAnnotation knexAnnotation or {@code null} for none
   */
  public PerDocData setKnexAnnotation(SocialPersonalizationKnexAnnotation knexAnnotation) {
    this.knexAnnotation = knexAnnotation;
    return this;
  }

  /**
   * Plausible languages in order of decreasing plausibility. Language values are small, IE < 127 so
   * this should compress to one byte each.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.Integer> getLanguages() {
    return languages;
  }

  /**
   * Plausible languages in order of decreasing plausibility. Language values are small, IE < 127 so
   * this should compress to one byte each.
   * @param languages languages or {@code null} for none
   */
  public PerDocData setLanguages(java.util.List<java.lang.Integer> languages) {
    this.languages = languages;
    return this;
  }

  /**
   * Last significant update of the document. This is sourced from the
   * quality_timebased.LastSignificantUpdate proto as computed by the LSUSelector from various
   * signals. The value is a UNIX timestamp in seconds.
   * @return value or {@code null} for none
   */
  public java.lang.Long getLastSignificantUpdate() {
    return lastSignificantUpdate;
  }

  /**
   * Last significant update of the document. This is sourced from the
   * quality_timebased.LastSignificantUpdate proto as computed by the LSUSelector from various
   * signals. The value is a UNIX timestamp in seconds.
   * @param lastSignificantUpdate lastSignificantUpdate or {@code null} for none
   */
  public PerDocData setLastSignificantUpdate(java.lang.Long lastSignificantUpdate) {
    this.lastSignificantUpdate = lastSignificantUpdate;
    return this;
  }

  /**
   * Metadata about last significant update. Currently this only encodes the
   * quality_timebased.LastSignificantUpdate.source field which contains the info on the source of
   * the signal. NOTE: Please do not read the value directly. Use helpers from
   * quality/timebased/lastsignificantupdate/lsu-helper.h instead.
   * @return value or {@code null} for none
   */
  public java.lang.Long getLastSignificantUpdateInfo() {
    return lastSignificantUpdateInfo;
  }

  /**
   * Metadata about last significant update. Currently this only encodes the
   * quality_timebased.LastSignificantUpdate.source field which contains the info on the source of
   * the signal. NOTE: Please do not read the value directly. Use helpers from
   * quality/timebased/lastsignificantupdate/lsu-helper.h instead.
   * @param lastSignificantUpdateInfo lastSignificantUpdateInfo or {@code null} for none
   */
  public PerDocData setLastSignificantUpdateInfo(java.lang.Long lastSignificantUpdateInfo) {
    this.lastSignificantUpdateInfo = lastSignificantUpdateInfo;
    return this;
  }

  /**
   * Info on how to launch a mobile app to consume this document's content, if applicable (see
   * go/calypso).
   * @return value or {@code null} for none
   */
  public QualityRichsnippetsAppsProtosLaunchAppInfoPerDocData getLaunchAppInfo() {
    return launchAppInfo;
  }

  /**
   * Info on how to launch a mobile app to consume this document's content, if applicable (see
   * go/calypso).
   * @param launchAppInfo launchAppInfo or {@code null} for none
   */
  public PerDocData setLaunchAppInfo(QualityRichsnippetsAppsProtosLaunchAppInfoPerDocData launchAppInfo) {
    this.launchAppInfo = launchAppInfo;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public WeboftrustLiveResultsDocAttachments getLiveResultsData() {
    return liveResultsData;
  }

  /**
   * @param liveResultsData liveResultsData or {@code null} for none
   */
  public PerDocData setLiveResultsData(WeboftrustLiveResultsDocAttachments liveResultsData) {
    this.liveResultsData = liveResultsData;
    return this;
  }

  /**
   * Information on localized clusters, which is the relationship of translated and/or localized
   * pages.
   * @return value or {@code null} for none
   */
  public IndexingDupsLocalizedLocalizedCluster getLocalizedCluster() {
    return localizedCluster;
  }

  /**
   * Information on localized clusters, which is the relationship of translated and/or localized
   * pages.
   * @param localizedCluster localizedCluster or {@code null} for none
   */
  public PerDocData setLocalizedCluster(IndexingDupsLocalizedLocalizedCluster localizedCluster) {
    this.localizedCluster = localizedCluster;
    return this;
  }

  /**
   * Contains the mids of the 5 most topical entities annotated with selected KG collections. This
   * information is currently used on Image Search to detect cases where results converged to mostly
   * a single person or media entity. More details: go/result-set-convergence.
   * @return value or {@code null} for none
   */
  public ImageQualitySensitiveMediaOrPeopleEntities getMediaOrPeopleEntities() {
    return mediaOrPeopleEntities;
  }

  /**
   * Contains the mids of the 5 most topical entities annotated with selected KG collections. This
   * information is currently used on Image Search to detect cases where results converged to mostly
   * a single person or media entity. More details: go/result-set-convergence.
   * @param mediaOrPeopleEntities mediaOrPeopleEntities or {@code null} for none
   */
  public PerDocData setMediaOrPeopleEntities(ImageQualitySensitiveMediaOrPeopleEntities mediaOrPeopleEntities) {
    this.mediaOrPeopleEntities = mediaOrPeopleEntities;
    return this;
  }

  /**
   * If not 0, we should not show the image in overlay mode in image snippets
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNoimageframeoverlayreason() {
    return noimageframeoverlayreason;
  }

  /**
   * If not 0, we should not show the image in overlay mode in image snippets
   * @param noimageframeoverlayreason noimageframeoverlayreason or {@code null} for none
   */
  public PerDocData setNoimageframeoverlayreason(java.lang.Integer noimageframeoverlayreason) {
    this.noimageframeoverlayreason = noimageframeoverlayreason;
    return this;
  }

  /**
   * Stripped site-level signals, not present in the explicit nsr_* fields, nor
   * compressed_quality_signals.
   * @return value or {@code null} for none
   */
  public QualityNsrNsrData getNsrDataProto() {
    return nsrDataProto;
  }

  /**
   * Stripped site-level signals, not present in the explicit nsr_* fields, nor
   * compressed_quality_signals.
   * @param nsrDataProto nsrDataProto or {@code null} for none
   */
  public PerDocData setNsrDataProto(QualityNsrNsrData nsrDataProto) {
    this.nsrDataProto = nsrDataProto;
    return this;
  }

  /**
   * This field is propagated to shards. In addition, it is populated at serving time by go/web-
   * signal-joins.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getNsrIsCovidLocalAuthority() {
    return nsrIsCovidLocalAuthority;
  }

  /**
   * This field is propagated to shards. In addition, it is populated at serving time by go/web-
   * signal-joins.
   * @param nsrIsCovidLocalAuthority nsrIsCovidLocalAuthority or {@code null} for none
   */
  public PerDocData setNsrIsCovidLocalAuthority(java.lang.Boolean nsrIsCovidLocalAuthority) {
    this.nsrIsCovidLocalAuthority = nsrIsCovidLocalAuthority;
    return this;
  }

  /**
   * This field is propagated to shards. It will also be populated at serving time by go/web-signal-
   * joins (see b/168114815).
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getNsrIsElectionAuthority() {
    return nsrIsElectionAuthority;
  }

  /**
   * This field is propagated to shards. It will also be populated at serving time by go/web-signal-
   * joins (see b/168114815).
   * @param nsrIsElectionAuthority nsrIsElectionAuthority or {@code null} for none
   */
  public PerDocData setNsrIsElectionAuthority(java.lang.Boolean nsrIsElectionAuthority) {
    this.nsrIsElectionAuthority = nsrIsElectionAuthority;
    return this;
  }

  /**
   * This field is propagated to shards. It will also be populated at serving time by go/web-signal-
   * joins (see b/170607253). Bit indicating whether this site is video-focused, but not hosted on
   * any major known video hosting domains.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getNsrIsVideoFocusedSite() {
    return nsrIsVideoFocusedSite;
  }

  /**
   * This field is propagated to shards. It will also be populated at serving time by go/web-signal-
   * joins (see b/170607253). Bit indicating whether this site is video-focused, but not hosted on
   * any major known video hosting domains.
   * @param nsrIsVideoFocusedSite nsrIsVideoFocusedSite or {@code null} for none
   */
  public PerDocData setNsrIsVideoFocusedSite(java.lang.Boolean nsrIsVideoFocusedSite) {
    this.nsrIsVideoFocusedSite = nsrIsVideoFocusedSite;
    return this;
  }

  /**
   * SiteChunk computed for nsr. It some cases it can use more information than just url (e.g.
   * youtube channels). See NsrAnnotator for details. If sitechunk is longer than
   * --populate_nsr_sitechunk_max_length (default=100), it will not get populated. This field might
   * be compressed and needs to be decoded with quality_nsr::util::DecodeNsrSitechunk. See go/nsr-
   * chunks for more details. This field contains only nontrivial primary chunks.
   * @return value or {@code null} for none
   */
  public java.lang.String getNsrSitechunk() {
    return nsrSitechunk;
  }

  /**
   * SiteChunk computed for nsr. It some cases it can use more information than just url (e.g.
   * youtube channels). See NsrAnnotator for details. If sitechunk is longer than
   * --populate_nsr_sitechunk_max_length (default=100), it will not get populated. This field might
   * be compressed and needs to be decoded with quality_nsr::util::DecodeNsrSitechunk. See go/nsr-
   * chunks for more details. This field contains only nontrivial primary chunks.
   * @param nsrSitechunk nsrSitechunk or {@code null} for none
   */
  public PerDocData setNsrSitechunk(java.lang.String nsrSitechunk) {
    this.nsrSitechunk = nsrSitechunk;
    return this;
  }

  /**
   * Total number of urls encoded in the url section = # of alternate urls + 1
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumUrls() {
    return numUrls;
  }

  /**
   * Total number of urls encoded in the url section = # of alternate urls + 1
   * @param numUrls numUrls or {@code null} for none
   */
  public PerDocData setNumUrls(java.lang.Integer numUrls) {
    this.numUrls = numUrls;
    return this;
  }

  /**
   * 28 bytes per page, only in the Ocean index
   * @return value or {@code null} for none
   */
  public OceanPerDocData getOceandata() {
    return oceandata;
  }

  /**
   * 28 bytes per page, only in the Ocean index
   * @param oceandata oceandata or {@code null} for none
   */
  public PerDocData setOceandata(OceanPerDocData oceandata) {
    this.oceandata = oceandata;
    return this;
  }

  /**
   * Onsite prominence measures the importance of the document within its site. It is computed by
   * propagating simulated traffic from the homepage and high craps click pages. It is a 13-bit int.
   * @return value or {@code null} for none
   */
  public java.lang.Long getOnsiteProminence() {
    return onsiteProminence;
  }

  /**
   * Onsite prominence measures the importance of the document within its site. It is computed by
   * propagating simulated traffic from the homepage and high craps click pages. It is a 13-bit int.
   * @param onsiteProminence onsiteProminence or {@code null} for none
   */
  public PerDocData setOnsiteProminence(java.lang.Long onsiteProminence) {
    this.onsiteProminence = onsiteProminence;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getOrigin() {
    return origin;
  }

  /**
   * @param origin origin or {@code null} for none
   */
  public PerDocData setOrigin(java.lang.Integer origin) {
    this.origin = origin;
    return this;
  }

  /**
   * The number of hard tokens in the title.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getOriginalTitleHardTokenCount() {
    return originalTitleHardTokenCount;
  }

  /**
   * The number of hard tokens in the title.
   * @param originalTitleHardTokenCount originalTitleHardTokenCount or {@code null} for none
   */
  public PerDocData setOriginalTitleHardTokenCount(java.lang.Integer originalTitleHardTokenCount) {
    this.originalTitleHardTokenCount = originalTitleHardTokenCount;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.Integer> getPageTags() {
    return pageTags;
  }

  /**
   * @param pageTags pageTags or {@code null} for none
   */
  public PerDocData setPageTags(java.util.List<java.lang.Integer> pageTags) {
    this.pageTags = pageTags;
    return this;
  }

  /**
   * Experimental pageranks (DEPRECATED; only pagerank in MustangBasicInfo is used).
   * @return value or {@code null} for none
   */
  public java.lang.Float getPagerank() {
    return pagerank;
  }

  /**
   * Experimental pageranks (DEPRECATED; only pagerank in MustangBasicInfo is used).
   * @param pagerank pagerank or {@code null} for none
   */
  public PerDocData setPagerank(java.lang.Float pagerank) {
    this.pagerank = pagerank;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getPagerank0() {
    return pagerank0;
  }

  /**
   * @param pagerank0 pagerank0 or {@code null} for none
   */
  public PerDocData setPagerank0(java.lang.Float pagerank0) {
    this.pagerank0 = pagerank0;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getPagerank1() {
    return pagerank1;
  }

  /**
   * @param pagerank1 pagerank1 or {@code null} for none
   */
  public PerDocData setPagerank1(java.lang.Float pagerank1) {
    this.pagerank1 = pagerank1;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getPagerank2() {
    return pagerank2;
  }

  /**
   * @param pagerank2 pagerank2 or {@code null} for none
   */
  public PerDocData setPagerank2(java.lang.Float pagerank2) {
    this.pagerank2 = pagerank2;
    return this;
  }

  /**
   * String that encodes the position ranges for different regions of the document. See
   * "indexer/pageregion.h" for an explanation, and how to decode the string
   * @return value or {@code null} for none
   */
  public java.lang.String getPageregions() {
    return pageregions;
  }

  /**
   * String that encodes the position ranges for different regions of the document. See
   * "indexer/pageregion.h" for an explanation, and how to decode the string
   * @param pageregions pageregions or {@code null} for none
   */
  public PerDocData setPageregions(java.lang.String pageregions) {
    this.pageregions = pageregions;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public PhilPerDocData getPhildata() {
    return phildata;
  }

  /**
   * @param phildata phildata or {@code null} for none
   */
  public PerDocData setPhildata(PhilPerDocData phildata) {
    this.phildata = phildata;
    return this;
  }

  /**
   * This field stores information about product sites.
   * @return value or {@code null} for none
   */
  public QualityProductProductSiteData getProductSitesInfo() {
    return productSitesInfo;
  }

  /**
   * This field stores information about product sites.
   * @param productSitesInfo productSitesInfo or {@code null} for none
   */
  public PerDocData setProductSitesInfo(QualityProductProductSiteData productSitesInfo) {
    this.productSitesInfo = productSitesInfo;
    return this;
  }

  /**
   * The set of (query, country, language) triples for which this document is considered to be the
   * official page. For example, www.britneyspears.com would be official for ("britney spears",
   * "us", 0) and others (0 is English).
   * @return value or {@code null} for none
   */
  public OfficialPagesQuerySet getQueriesForWhichOfficial() {
    return queriesForWhichOfficial;
  }

  /**
   * The set of (query, country, language) triples for which this document is considered to be the
   * official page. For example, www.britneyspears.com would be official for ("britney spears",
   * "us", 0) and others (0 is English).
   * @param queriesForWhichOfficial queriesForWhichOfficial or {@code null} for none
   */
  public PerDocData setQueriesForWhichOfficial(OfficialPagesQuerySet queriesForWhichOfficial) {
    this.queriesForWhichOfficial = queriesForWhichOfficial;
    return this;
  }

  /**
   * Top two document language BCP-47 codes as generated by the RosettaLanguageAnnotator in the
   * decreasing order of probability.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getRosettaLanguages() {
    return rosettaLanguages;
  }

  /**
   * Top two document language BCP-47 codes as generated by the RosettaLanguageAnnotator in the
   * decreasing order of probability.
   * @param rosettaLanguages rosettaLanguages or {@code null} for none
   */
  public PerDocData setRosettaLanguages(java.util.List<java.lang.String> rosettaLanguages) {
    this.rosettaLanguages = rosettaLanguages;
    return this;
  }

  /**
   * Application information associated to the document.
   * @return value or {@code null} for none
   */
  public RepositoryAnnotationsRdfaRdfaRichSnippetsApplication getRsApplication() {
    return rsApplication;
  }

  /**
   * Application information associated to the document.
   * @param rsApplication rsApplication or {@code null} for none
   */
  public PerDocData setRsApplication(RepositoryAnnotationsRdfaRdfaRichSnippetsApplication rsApplication) {
    this.rsApplication = rsApplication;
    return this;
  }

  /**
   * Primary video's audio language classified by S3 based Automatic Language Identification (only
   * for watch pages).
   * @return value or {@code null} for none
   */
  public S3AudioLanguageS3AudioLanguage getS3AudioLanguage() {
    return s3AudioLanguage;
  }

  /**
   * Primary video's audio language classified by S3 based Automatic Language Identification (only
   * for watch pages).
   * @param s3AudioLanguage s3AudioLanguage or {@code null} for none
   */
  public PerDocData setS3AudioLanguage(S3AudioLanguageS3AudioLanguage s3AudioLanguage) {
    this.s3AudioLanguage = s3AudioLanguage;
    return this;
  }

  /**
   * Top document language as generated by SAFT LangID. For now we store bare minimum: just the top
   * 1 language value, converted to the language enum, and only when different from the first value
   * in 'languages'.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.Integer> getSaftLanguageInt() {
    return saftLanguageInt;
  }

  /**
   * Top document language as generated by SAFT LangID. For now we store bare minimum: just the top
   * 1 language value, converted to the language enum, and only when different from the first value
   * in 'languages'.
   * @param saftLanguageInt saftLanguageInt or {@code null} for none
   */
  public PerDocData setSaftLanguageInt(java.util.List<java.lang.Integer> saftLanguageInt) {
    this.saftLanguageInt = saftLanguageInt;
    return this;
  }

  /**
   * Selection tier rank is a language normalized score ranging from 0-32767 over the serving tier
   * (Base, Zeppelins, Landfills) for this document. This is converted back to fractional position
   * within the index tier by scaled_selection_tier_rank/32767.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScaledSelectionTierRank() {
    return scaledSelectionTierRank;
  }

  /**
   * Selection tier rank is a language normalized score ranging from 0-32767 over the serving tier
   * (Base, Zeppelins, Landfills) for this document. This is converted back to fractional position
   * within the index tier by scaled_selection_tier_rank/32767.
   * @param scaledSelectionTierRank scaledSelectionTierRank or {@code null} for none
   */
  public PerDocData setScaledSelectionTierRank(java.lang.Integer scaledSelectionTierRank) {
    this.scaledSelectionTierRank = scaledSelectionTierRank;
    return this;
  }

  /**
   * Scholar/Science Document type: <0 == not a Science Document -- default 0 == Science doc fully
   * visible >0 == Science doc but limited visibility, the number is the visible terms
   * @return value or {@code null} for none
   */
  public java.lang.Integer getScienceDoctype() {
    return scienceDoctype;
  }

  /**
   * Scholar/Science Document type: <0 == not a Science Document -- default 0 == Science doc fully
   * visible >0 == Science doc but limited visibility, the number is the visible terms
   * @param scienceDoctype scienceDoctype or {@code null} for none
   */
  public PerDocData setScienceDoctype(java.lang.Integer scienceDoctype) {
    this.scienceDoctype = scienceDoctype;
    return this;
  }

  /**
   * Deprecated 2016/01/14.
   * @return value or {@code null} for none
   */
  public java.util.List<java.math.BigInteger> getScienceHoldingsIds() {
    return scienceHoldingsIds;
  }

  /**
   * Deprecated 2016/01/14.
   * @param scienceHoldingsIds scienceHoldingsIds or {@code null} for none
   */
  public PerDocData setScienceHoldingsIds(java.util.List<java.math.BigInteger> scienceHoldingsIds) {
    this.scienceHoldingsIds = scienceHoldingsIds;
    return this;
  }

  /**
   * SemanticDate, estimated date of the content of a document based on the contents of the document
   * (via parsing), anchors and related documents. Date is encoded as a 32-bits UNIX date (1970 Jan
   * 1 epoch). Confidence is encoded using a SemanticDate specific format. For details of encoding,
   * please refer to quality/freshness/docclassifier/semanticdate/public/semantic_date.proto
   * @return value or {@code null} for none
   */
  public java.lang.Integer getSemanticDate() {
    return semanticDate;
  }

  /**
   * SemanticDate, estimated date of the content of a document based on the contents of the document
   * (via parsing), anchors and related documents. Date is encoded as a 32-bits UNIX date (1970 Jan
   * 1 epoch). Confidence is encoded using a SemanticDate specific format. For details of encoding,
   * please refer to quality/freshness/docclassifier/semanticdate/public/semantic_date.proto
   * @param semanticDate semanticDate or {@code null} for none
   */
  public PerDocData setSemanticDate(java.lang.Integer semanticDate) {
    this.semanticDate = semanticDate;
    return this;
  }

  /**
   * DEPRECATED: semantic_date_confidence replaced by semantic_date_info.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getSemanticDateConfidence() {
    return semanticDateConfidence;
  }

  /**
   * DEPRECATED: semantic_date_confidence replaced by semantic_date_info.
   * @param semanticDateConfidence semanticDateConfidence or {@code null} for none
   */
  public PerDocData setSemanticDateConfidence(java.lang.Integer semanticDateConfidence) {
    this.semanticDateConfidence = semanticDateConfidence;
    return this;
  }

  /**
   * Info is encoded using a SemanticDate specific format. Contains confidence scores for
   * day/month/year components as well as various meta data required by the freshness twiddlers.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getSemanticDateInfo() {
    return semanticDateInfo;
  }

  /**
   * Info is encoded using a SemanticDate specific format. Contains confidence scores for
   * day/month/year components as well as various meta data required by the freshness twiddlers.
   * @param semanticDateInfo semanticDateInfo or {@code null} for none
   */
  public PerDocData setSemanticDateInfo(java.lang.Integer semanticDateInfo) {
    this.semanticDateInfo = semanticDateInfo;
    return this;
  }

  /**
   * A set of cluster ids which are generated in Alexandria and used to de-dup results at serving
   * time.
   * @return value or {@code null} for none
   */
  public IndexingDocjoinerServingTimeClusterIds getServingTimeClusterIds() {
    return servingTimeClusterIds;
  }

  /**
   * A set of cluster ids which are generated in Alexandria and used to de-dup results at serving
   * time.
   * @param servingTimeClusterIds servingTimeClusterIds or {@code null} for none
   */
  public PerDocData setServingTimeClusterIds(IndexingDocjoinerServingTimeClusterIds servingTimeClusterIds) {
    this.servingTimeClusterIds = servingTimeClusterIds;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public ShingleInfoPerDocData getShingleInfo() {
    return shingleInfo;
  }

  /**
   * @param shingleInfo shingleInfo or {@code null} for none
   */
  public PerDocData setShingleInfo(ShingleInfoPerDocData shingleInfo) {
    this.shingleInfo = shingleInfo;
    return this;
  }

  /**
   * Additional metadata for smartphone documents in the Google index.
   * @return value or {@code null} for none
   */
  public SmartphonePerDocData getSmartphoneData() {
    return smartphoneData;
  }

  /**
   * Additional metadata for smartphone documents in the Google index.
   * @param smartphoneData smartphoneData or {@code null} for none
   */
  public PerDocData setSmartphoneData(SmartphonePerDocData smartphoneData) {
    this.smartphoneData = smartphoneData;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getSmearingMaxTotalOffdomainAnchors() {
    return smearingMaxTotalOffdomainAnchors;
  }

  /**
   * @param smearingMaxTotalOffdomainAnchors smearingMaxTotalOffdomainAnchors or {@code null} for none
   */
  public PerDocData setSmearingMaxTotalOffdomainAnchors(java.lang.Integer smearingMaxTotalOffdomainAnchors) {
    this.smearingMaxTotalOffdomainAnchors = smearingMaxTotalOffdomainAnchors;
    return this;
  }

  /**
   * For Social Search we store the fingerprint of the SG node name. This is used in one of the
   * superroot's PRE_DOC twiddlers as a lookup key for the full Social Search data. PRE_DOC =
   * twiddlers firing before the DocInfo request is sent to the mustang backend.
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getSocialgraphNodeNameFp() {
    return socialgraphNodeNameFp;
  }

  /**
   * For Social Search we store the fingerprint of the SG node name. This is used in one of the
   * superroot's PRE_DOC twiddlers as a lookup key for the full Social Search data. PRE_DOC =
   * twiddlers firing before the DocInfo request is sent to the mustang backend.
   * @param socialgraphNodeNameFp socialgraphNodeNameFp or {@code null} for none
   */
  public PerDocData setSocialgraphNodeNameFp(java.math.BigInteger socialgraphNodeNameFp) {
    this.socialgraphNodeNameFp = socialgraphNodeNameFp;
    return this;
  }

  /**
   * Actions based on Cookbook recipes that match the page.
   * @return value or {@code null} for none
   */
  public SpamCookbookAction getSpamCookbookAction() {
    return spamCookbookAction;
  }

  /**
   * Actions based on Cookbook recipes that match the page.
   * @param spamCookbookAction spamCookbookAction or {@code null} for none
   */
  public PerDocData setSpamCookbookAction(SpamCookbookAction spamCookbookAction) {
    this.spamCookbookAction = spamCookbookAction;
    return this;
  }

  /**
   * Contains hacked site signals which will be used in query time joins. As of Oct'19, the field is
   * stored in a separate corpus. It'll only be populated for in-flight requests between retrieve
   * and full-score in perdocdata. So no extra storage is needed on muppet side.
   * @return value or {@code null} for none
   */
  public SpamMuppetjoinsMuppetSignals getSpamMuppetSignals() {
    return spamMuppetSignals;
  }

  /**
   * Contains hacked site signals which will be used in query time joins. As of Oct'19, the field is
   * stored in a separate corpus. It'll only be populated for in-flight requests between retrieve
   * and full-score in perdocdata. So no extra storage is needed on muppet side.
   * @param spamMuppetSignals spamMuppetSignals or {@code null} for none
   */
  public PerDocData setSpamMuppetSignals(SpamMuppetjoinsMuppetSignals spamMuppetSignals) {
    this.spamMuppetSignals = spamMuppetSignals;
    return this;
  }

  /**
   * Site level scores coming from spambrain.
   * @return value or {@code null} for none
   */
  public SpamBrainData getSpambrainData() {
    return spambrainData;
  }

  /**
   * Site level scores coming from spambrain.
   * @param spambrainData spambrainData or {@code null} for none
   */
  public PerDocData setSpambrainData(SpamBrainData spambrainData) {
    this.spambrainData = spambrainData;
    return this;
  }

  /**
   * The document total spam score identified by spambrain, going from 0 to 1.
   * @return value or {@code null} for none
   */
  public java.lang.Float getSpambrainTotalDocSpamScore() {
    return spambrainTotalDocSpamScore;
  }

  /**
   * The document total spam score identified by spambrain, going from 0 to 1.
   * @param spambrainTotalDocSpamScore spambrainTotalDocSpamScore or {@code null} for none
   */
  public PerDocData setSpambrainTotalDocSpamScore(java.lang.Float spambrainTotalDocSpamScore) {
    this.spambrainTotalDocSpamScore = spambrainTotalDocSpamScore;
    return this;
  }

  /**
   * The spamrank measures the likelihood that this document links to known spammers. Its value is
   * between 0 and 65535.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getSpamrank() {
    return spamrank;
  }

  /**
   * The spamrank measures the likelihood that this document links to known spammers. Its value is
   * between 0 and 65535.
   * @param spamrank spamrank or {@code null} for none
   */
  public PerDocData setSpamrank(java.lang.Integer spamrank) {
    this.spamrank = spamrank;
    return this;
  }

  /**
   * For SpamTokens content scores. Used in SiteBoostTwiddler to determine whether a page is UGC
   * Spam. See go/spamtokens-dd for details.
   * @return value or {@code null} for none
   */
  public java.lang.Float getSpamtokensContentScore() {
    return spamtokensContentScore;
  }

  /**
   * For SpamTokens content scores. Used in SiteBoostTwiddler to determine whether a page is UGC
   * Spam. See go/spamtokens-dd for details.
   * @param spamtokensContentScore spamtokensContentScore or {@code null} for none
   */
  public PerDocData setSpamtokensContentScore(java.lang.Float spamtokensContentScore) {
    this.spamtokensContentScore = spamtokensContentScore;
    return this;
  }

  /**
   * Encoded Document Time Sensitivity signal.
   * @return value or {@code null} for none
   */
  public java.lang.Long getTimeSensitivity() {
    return timeSensitivity;
  }

  /**
   * Encoded Document Time Sensitivity signal.
   * @param timeSensitivity timeSensitivity or {@code null} for none
   */
  public PerDocData setTimeSensitivity(java.lang.Long timeSensitivity) {
    this.timeSensitivity = timeSensitivity;
    return this;
  }

  /**
   * Number of hard tokens originally in title without counting the stopwords.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getTitleHardTokenCountWithoutStopwords() {
    return titleHardTokenCountWithoutStopwords;
  }

  /**
   * Number of hard tokens originally in title without counting the stopwords.
   * @param titleHardTokenCountWithoutStopwords titleHardTokenCountWithoutStopwords or {@code null} for none
   */
  public PerDocData setTitleHardTokenCountWithoutStopwords(java.lang.Integer titleHardTokenCountWithoutStopwords) {
    this.titleHardTokenCountWithoutStopwords = titleHardTokenCountWithoutStopwords;
    return this;
  }

  /**
   * A copy of the value stored in /namespace/indexing/wwwglobal//fakepr for this document. A value
   * of quality_bakery::FakeprUtils::kUnknownToolbarPagerank indicates that we don't have toolbar
   * pagerank for this document. A value between 0 and 10 (inclusive) means that this is the toolbar
   * pagerank of the page. Finally, if this value is not set it means that the toolbar pagerank is
   * equivalent to: quality_bakery::FakeprUtils::EstimatePreDemotionFromPagerankNearestSeeds(
   * basic_info.pagerank_ns()) called on the MustangBasicInfo attachment for the same document.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getToolbarPagerank() {
    return toolbarPagerank;
  }

  /**
   * A copy of the value stored in /namespace/indexing/wwwglobal//fakepr for this document. A value
   * of quality_bakery::FakeprUtils::kUnknownToolbarPagerank indicates that we don't have toolbar
   * pagerank for this document. A value between 0 and 10 (inclusive) means that this is the toolbar
   * pagerank of the page. Finally, if this value is not set it means that the toolbar pagerank is
   * equivalent to: quality_bakery::FakeprUtils::EstimatePreDemotionFromPagerankNearestSeeds(
   * basic_info.pagerank_ns()) called on the MustangBasicInfo attachment for the same document.
   * @param toolbarPagerank toolbarPagerank or {@code null} for none
   */
  public PerDocData setToolbarPagerank(java.lang.Integer toolbarPagerank) {
    this.toolbarPagerank = toolbarPagerank;
    return this;
  }

  /**
   * Top petacat of the site. Used in SiteboostTwiddler to determine result/query matching.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getTopPetacatTaxId() {
    return topPetacatTaxId;
  }

  /**
   * Top petacat of the site. Used in SiteboostTwiddler to determine result/query matching.
   * @param topPetacatTaxId topPetacatTaxId or {@code null} for none
   */
  public PerDocData setTopPetacatTaxId(java.lang.Integer topPetacatTaxId) {
    this.topPetacatTaxId = topPetacatTaxId;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getTopPetacatWeight() {
    return topPetacatWeight;
  }

  /**
   * @param topPetacatWeight topPetacatWeight or {@code null} for none
   */
  public PerDocData setTopPetacatWeight(java.lang.Float topPetacatWeight) {
    this.topPetacatWeight = topPetacatWeight;
    return this;
  }

  /**
   * This field stores information about good travel sites.
   * @return value or {@code null} for none
   */
  public QualityTravelGoodSitesData getTravelGoodSitesInfo() {
    return travelGoodSitesInfo;
  }

  /**
   * This field stores information about good travel sites.
   * @param travelGoodSitesInfo travelGoodSitesInfo or {@code null} for none
   */
  public PerDocData setTravelGoodSitesInfo(QualityTravelGoodSitesData travelGoodSitesInfo) {
    this.travelGoodSitesInfo = travelGoodSitesInfo;
    return this;
  }

  /**
   * For now, the count of matching trendspam queries.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getTrendspamScore() {
    return trendspamScore;
  }

  /**
   * For now, the count of matching trendspam queries.
   * @param trendspamScore trendspamScore or {@code null} for none
   */
  public PerDocData setTrendspamScore(java.lang.Integer trendspamScore) {
    this.trendspamScore = trendspamScore;
    return this;
  }

  /**
   * This field is propagated to shards. Stores clustering information on a site level for the
   * Tundra project.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getTundraClusterId() {
    return tundraClusterId;
  }

  /**
   * This field is propagated to shards. Stores clustering information on a site level for the
   * Tundra project.
   * @param tundraClusterId tundraClusterId or {@code null} for none
   */
  public PerDocData setTundraClusterId(java.lang.Integer tundraClusterId) {
    this.tundraClusterId = tundraClusterId;
    return this;
  }

  /**
   * The uac spam score is represented in 7 bits, going from 0 to 127. Threshold is 64. Score >= 64
   * is considered as uac spam.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getUacSpamScore() {
    return uacSpamScore;
  }

  /**
   * The uac spam score is represented in 7 bits, going from 0 to 127. Threshold is 64. Score >= 64
   * is considered as uac spam.
   * @param uacSpamScore uacSpamScore or {@code null} for none
   */
  public PerDocData setUacSpamScore(java.lang.Integer uacSpamScore) {
    this.uacSpamScore = uacSpamScore;
    return this;
  }

  /**
   * These two fingerprints are used for de-duping results in a twiddler. They should only be
   * populated by freshdocs, and will only be present for documents that are chosen to be canonicals
   * in a cluster whose previous canonical is also in the index. Additionally,
   * url_after_redirects_fp is only present if it is different from a fingerprint of the URL.
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getUrlAfterRedirectsFp() {
    return urlAfterRedirectsFp;
  }

  /**
   * These two fingerprints are used for de-duping results in a twiddler. They should only be
   * populated by freshdocs, and will only be present for documents that are chosen to be canonicals
   * in a cluster whose previous canonical is also in the index. Additionally,
   * url_after_redirects_fp is only present if it is different from a fingerprint of the URL.
   * @param urlAfterRedirectsFp urlAfterRedirectsFp or {@code null} for none
   */
  public PerDocData setUrlAfterRedirectsFp(java.math.BigInteger urlAfterRedirectsFp) {
    this.urlAfterRedirectsFp = urlAfterRedirectsFp;
    return this;
  }

  /**
   * Contains url poisoning data for suppressing spam documents.
   * @return value or {@code null} for none
   */
  public UrlPoisoningData getUrlPoisoningData() {
    return urlPoisoningData;
  }

  /**
   * Contains url poisoning data for suppressing spam documents.
   * @param urlPoisoningData urlPoisoningData or {@code null} for none
   */
  public PerDocData setUrlPoisoningData(UrlPoisoningData urlPoisoningData) {
    this.urlPoisoningData = urlPoisoningData;
    return this;
  }

  /**
   * For indexing v2 k'nex, see/go/knex-v2-doc-annotation for details.
   * @return value or {@code null} for none
   */
  public QualitySherlockKnexAnnotation getV2KnexAnnotation() {
    return v2KnexAnnotation;
  }

  /**
   * For indexing v2 k'nex, see/go/knex-v2-doc-annotation for details.
   * @param v2KnexAnnotation v2KnexAnnotation or {@code null} for none
   */
  public PerDocData setV2KnexAnnotation(QualitySherlockKnexAnnotation v2KnexAnnotation) {
    this.v2KnexAnnotation = v2KnexAnnotation;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getVideoCorpusDocid() {
    return videoCorpusDocid;
  }

  /**
   * @param videoCorpusDocid videoCorpusDocid or {@code null} for none
   */
  public PerDocData setVideoCorpusDocid(java.math.BigInteger videoCorpusDocid) {
    this.videoCorpusDocid = videoCorpusDocid;
    return this;
  }

  /**
   * Audio-based language classified by Automatic Language Identification (only for watch pages).
   * @return value or {@code null} for none
   */
  public QualityVidyaVideoLanguageVideoLanguage getVideoLanguage() {
    return videoLanguage;
  }

  /**
   * Audio-based language classified by Automatic Language Identification (only for watch pages).
   * @param videoLanguage videoLanguage or {@code null} for none
   */
  public PerDocData setVideoLanguage(QualityVidyaVideoLanguageVideoLanguage videoLanguage) {
    this.videoLanguage = videoLanguage;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public VideoPerDocData getVideodata() {
    return videodata;
  }

  /**
   * @param videodata videodata or {@code null} for none
   */
  public PerDocData setVideodata(VideoPerDocData videodata) {
    this.videodata = videodata;
    return this;
  }

  /**
   * Contains page UX signals for VOLT ranking change. See http://ariane/4025970 for more details.
   * @return value or {@code null} for none
   */
  public IndexingMobileVoltVoltPerDocData getVoltData() {
    return voltData;
  }

  /**
   * Contains page UX signals for VOLT ranking change. See http://ariane/4025970 for more details.
   * @param voltData voltData or {@code null} for none
   */
  public PerDocData setVoltData(IndexingMobileVoltVoltPerDocData voltData) {
    this.voltData = voltData;
    return this;
  }

  /**
   * Language classified by the WatchPageLanguage Model (go/watchpage-language). Only present for
   * watch pages.
   * @return value or {@code null} for none
   */
  public WatchpageLanguageWatchPageLanguageResult getWatchpageLanguageResult() {
    return watchpageLanguageResult;
  }

  /**
   * Language classified by the WatchPageLanguage Model (go/watchpage-language). Only present for
   * watch pages.
   * @param watchpageLanguageResult watchpageLanguageResult or {@code null} for none
   */
  public PerDocData setWatchpageLanguageResult(WatchpageLanguageWatchPageLanguageResult watchpageLanguageResult) {
    this.watchpageLanguageResult = watchpageLanguageResult;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getWebmirrorEcnFp() {
    return webmirrorEcnFp;
  }

  /**
   * @param webmirrorEcnFp webmirrorEcnFp or {@code null} for none
   */
  public PerDocData setWebmirrorEcnFp(java.math.BigInteger webmirrorEcnFp) {
    this.webmirrorEcnFp = webmirrorEcnFp;
    return this;
  }

  /**
   * WebRef entities associated to the document. See go/webref for details.
   * @return value or {@code null} for none
   */
  public RepositoryWebrefWebrefMustangAttachment getWebrefEntities() {
    return webrefEntities;
  }

  /**
   * WebRef entities associated to the document. See go/webref for details.
   * @param webrefEntities webrefEntities or {@code null} for none
   */
  public PerDocData setWebrefEntities(RepositoryWebrefWebrefMustangAttachment webrefEntities) {
    this.webrefEntities = webrefEntities;
    return this;
  }

  /**
   * Stores scores of ymyl health classifier as defined at go/ymyl-classifier-dd. To use this field,
   * you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_nfg9oAldou.
   * @return value or {@code null} for none
   */
  public java.lang.Long getYmylHealthScore() {
    return ymylHealthScore;
  }

  /**
   * Stores scores of ymyl health classifier as defined at go/ymyl-classifier-dd. To use this field,
   * you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_nfg9oAldou.
   * @param ymylHealthScore ymylHealthScore or {@code null} for none
   */
  public PerDocData setYmylHealthScore(java.lang.Long ymylHealthScore) {
    this.ymylHealthScore = ymylHealthScore;
    return this;
  }

  /**
   * Stores scores of ymyl news classifier as defined at go/ymyl-classifier-dd. To use this field,
   * you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_nfg9oAldou.
   * @return value or {@code null} for none
   */
  public java.lang.Long getYmylNewsScore() {
    return ymylNewsScore;
  }

  /**
   * Stores scores of ymyl news classifier as defined at go/ymyl-classifier-dd. To use this field,
   * you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_nfg9oAldou.
   * @param ymylNewsScore ymylNewsScore or {@code null} for none
   */
  public PerDocData setYmylNewsScore(java.lang.Long ymylNewsScore) {
    this.ymylNewsScore = ymylNewsScore;
    return this;
  }

  @Override
  public PerDocData set(String fieldName, Object value) {
    return (PerDocData) super.set(fieldName, value);
  }

  @Override
  public PerDocData clone() {
    return (PerDocData) super.clone();
  }

}
