<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You 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.
-->
<!-- Do not modify this file directly.  Instead, copy entries that you -->
<!-- wish to modify from this file into nutch-site.xml and change them -->
<!-- there.  If nutch-site.xml does not already exist, create it.      -->

<configuration>

<!-- general properties  -->

<property>
  <name>store.ip.address</name>
  <value>false</value>
  <description>Enables us to capture the specific IP address 
  (InetSocketAddress) of the host which we connect to via 
  the given protocol. Currently supported is protocol-ftp and
  http.
  </description>
</property>

<!-- file properties -->

<property>
  <name>file.content.limit</name>
  <value>65536</value>
  <description>The length limit for downloaded content using the file://
  protocol, in bytes. If this value is nonnegative (>=0), content longer
  than it will be truncated; otherwise, no truncation at all. Do not
  confuse this setting with the http.content.limit setting.
  </description>
</property>
  
<property>
  <name>file.crawl.parent</name>
  <value>true</value>
  <description>The crawler is not restricted to the directories that you specified in the
    Urls file but it is jumping into the parent directories as well. For your own crawlings you can
    change this behavior (set to false) the way that only directories beneath the directories that you specify get
    crawled.</description>
</property>

<property>
  <name>file.crawl.redirect_noncanonical</name>
  <value>true</value>
  <description>
    If true, protocol-file treats non-canonical file names as
    redirects and does not canonicalize file names internally. A file
    name containing symbolic links as path elements is then not
    resolved and &quot;fetched&quot; but recorded as redirect with the
    canonical name (all links on path are resolved) as redirect
    target.
  </description>
</property>

<property>
  <name>file.content.ignored</name>
  <value>true</value>
  <description>If true, no file content will be saved during fetch.
  And it is probably what we want to set most of time, since file:// URLs
  are meant to be local and we can always use them directly at parsing
  and indexing stages. Otherwise file contents will be saved.
  !! NO IMPLEMENTED YET !!
  </description>
</property>

<!-- HTTP properties -->

<property>
  <name>http.agent.name</name>
  <value></value>
  <description>HTTP 'User-Agent' request header. MUST NOT be empty - 
  please set this to a single word uniquely related to your organization.

  NOTE: You should also check other related properties:

    http.robots.agents
    http.agent.description
    http.agent.url
    http.agent.email
    http.agent.version

  and set their values appropriately.

  </description>
</property>

<property>
  <name>http.robots.agents</name>
  <value></value>
  <description>Any other agents, apart from 'http.agent.name', that the robots
  parser would look for in robots.txt. Multiple agents can be provided using 
  comma as a delimiter. eg. mybot,foo-spider,bar-crawler
  
  The ordering of agents does NOT matter and the robots parser would make 
  decision based on the agent which matches first to the robots rules.  
  Also, there is NO need to add a wildcard (ie. "*") to this string as the 
  robots parser would smartly take care of a no-match situation. 
    
  If no value is specified, by default HTTP agent (ie. 'http.agent.name') 
  would be used for user agent matching by the robots parser. 
  </description>
</property>

<property>
  <name>http.robot.rules.whitelist</name>
  <value></value>
  <description>Comma separated list of hostnames or IP addresses to ignore 
  robot rules parsing for. Use with care and only if you are explicitly
  allowed by the site owner to ignore the site's robots.txt!
  </description>
</property>

<property>
  <name>http.robots.403.allow</name>
  <value>true</value>
  <description>Some servers return HTTP status 403 (Forbidden) if
  /robots.txt doesn't exist. This should probably mean that we are
  allowed to crawl the site nonetheless. If this is set to false,
  then such sites will be treated as forbidden.</description>
</property>

<property>
  <name>http.agent.description</name>
  <value></value>
  <description>Further description of our bot- this text is used in
  the User-Agent header.  It appears in parenthesis after the agent name.
  </description>
</property>

<property>
  <name>http.agent.url</name>
  <value></value>
  <description>A URL to advertise in the User-Agent header.  This will 
   appear in parenthesis after the agent name. Custom dictates that this
   should be a URL of a page explaining the purpose and behavior of this
   crawler.
  </description>
</property>

<property>
  <name>http.agent.email</name>
  <value></value>
  <description>An email address to advertise in the HTTP 'From' request
   header and User-Agent header. A good practice is to mangle this
   address (e.g. 'info at example dot com') to avoid spamming.
  </description>
</property>

<property>
  <name>http.agent.version</name>
  <value>Nutch-1.16-SNAPSHOT</value>
  <description>A version string to advertise in the User-Agent 
   header.</description>
</property>

<property>
  <name>http.agent.rotate</name>
  <value>false</value>
  <description>
    If true, instead of http.agent.name, alternating agent names are
    chosen from a list provided via http.agent.rotate.file.
  </description>
</property>

<property>
  <name>http.agent.rotate.file</name>
  <value>agents.txt</value>
  <description>
    File containing alternative user agent names to be used instead of
    http.agent.name on a rotating basis if http.agent.rotate is true.
    Each line of the file should contain exactly one agent
    specification including name, version, description, URL, etc.
  </description>
</property>

<property>
  <name>http.agent.host</name>
  <value></value>
  <description>Name or IP address of the host on which the Nutch crawler
  would be running. Currently this is used by 'protocol-httpclient'
  plugin.
  </description>
</property>

<property>
  <name>http.timeout</name>
  <value>10000</value>
  <description>The default network timeout, in milliseconds.</description>
</property>

<property>
  <name>http.max.delays</name>
  <value>100</value>
  <description>The number of times a thread will delay when trying to
  fetch a page.  Each time it finds that a host is busy, it will wait
  fetcher.server.delay.  After http.max.delays attempts, it will give
  up on the page for now.</description>
</property>

<property>
  <name>http.content.limit</name>
  <value>65536</value>
  <description>The length limit for downloaded content using the http://
  protocol, in bytes. If this value is nonnegative (>=0), content longer
  than it will be truncated; otherwise, no truncation at all. Do not
  confuse this setting with the file.content.limit setting.
  </description>
</property>

<property>
  <name>http.time.limit</name>
  <value>-1</value>
  <description>The time limit in seconds to fetch a single document.
  If this value is nonnegative (>=0), the HTTP protocol implementation
  will stop reading from a socket after http.time.limit seconds have
  been spent for fetching this document.  The HTTP response is then
  marked as truncated.  The http.time.limit should be set to a longer
  time period than http.timeout, as it applies to the entire duration
  to fetch a document, not only the network timeout of a single I/O
  operation.  Note: supported only by protocol-okhttp.
  </description>
</property>

<property>
  <name>http.partial.truncated</name>
  <value>false</value>
  <description>
    If true the HTTP protocol implementation may store the content of
    partial fetches and mark the response as truncated instead of
    throwing an exception which will cause the fetch to fail.  This
    allows to use the data which has already been fetched, instead of
    retrying the fetch later.  Note: supported only by protocol-okhttp.
  </description>
</property>

<property>
  <name>http.tls.certificates.check</name>
  <value>false</value>
  <description>
    Whether to check the TLS/SSL server certificates for validity.
    If true invalid (e.g., self-signed or expired) certificates are
    rejected and the https connection is failed.  If false insecure
    TLS/SSL connections are allowed.  Note that this property is
    currently not supported by all http/https protocol plugins.
  </description>
</property>

<property>
  <name>http.proxy.host</name>
  <value></value>
  <description>The proxy hostname.  If empty, no proxy is used.</description>
</property>

<property>
  <name>http.proxy.port</name>
  <value></value>
  <description>The proxy port.</description>
</property>

<property>
  <name>http.proxy.username</name>
  <value></value>
  <description>Username for proxy. This will be used by
  'protocol-httpclient', if the proxy server requests basic, digest
  and/or NTLM authentication. To use this, 'protocol-httpclient' must
  be present in the value of 'plugin.includes' property.
  NOTE: For NTLM authentication, do not prefix the username with the
  domain, i.e. 'susam' is correct whereas 'DOMAIN\susam' is incorrect.
  </description>
</property>

<property>
  <name>http.proxy.password</name>
  <value></value>
  <description>Password for proxy. This will be used by
  'protocol-httpclient', if the proxy server requests basic, digest
  and/or NTLM authentication. To use this, 'protocol-httpclient' must
  be present in the value of 'plugin.includes' property.
  </description>
</property>

<property>
  <name>http.proxy.realm</name>
  <value></value>
  <description>Authentication realm for proxy. Do not define a value
  if realm is not required or authentication should take place for any
  realm. NTLM does not use the notion of realms. Specify the domain name
  of NTLM authentication as the value for this property. To use this,
  'protocol-httpclient' must be present in the value of
  'plugin.includes' property.
  </description>
</property>

<property>
  <name>http.auth.file</name>
  <value>httpclient-auth.xml</value>
  <description>Authentication configuration file for
  'protocol-httpclient' plugin.
  </description>
</property>

<property>
  <name>http.proxy.type</name>
  <value>HTTP</value>
  <description>
    Proxy type: HTTP or SOCKS (cf. java.net.Proxy.Type).
    Note: supported by protocol-okhttp.
  </description>
</property>

<property>
  <name>http.proxy.exception.list</name>
  <value></value>
  <description>A comma separated list of hosts that don't use the proxy 
  (e.g. intranets). Example: www.apache.org</description>
</property>

<property>
  <name>http.verbose</name>
  <value>false</value>
  <description>If true, HTTP will log more verbosely.</description>
</property>

<property>
  <name>http.redirect.max</name>
  <value>0</value>
  <description>The maximum number of redirects the fetcher will follow when
  trying to fetch a page. If set to negative or 0, fetcher won't immediately
  follow redirected URLs, instead it will record them for later fetching.
  </description>
</property>

<property>
  <name>http.useHttp11</name>
  <value>true</value>
  <description>
    If true, use HTTP 1.1, if false use HTTP 1.0 .
  </description>
</property>

<property>
  <name>http.useHttp2</name>
  <value>false</value>
  <description>
    If true try HTTP/2 and fall-back to HTTP/1.1 if HTTP/2 not
    supported, if false use always HTTP/1.1.

    NOTE: HTTP/2 is currently only supported by protocol-okhttp and
    requires at runtime Java 9 or a modified Java 8 with support for
    ALPN (Application Layer Protocol Negotiation).
  </description>
</property>

<property>
  <name>http.accept.language</name>
  <value>en-us,en-gb,en;q=0.7,*;q=0.3</value>
  <description>Value of the "Accept-Language" request header field.
  This allows selecting non-English language as default one to retrieve.
  It is a useful setting for search engines build for certain national group.
  To send requests without "Accept-Language" header field, thi  property must
  be configured to contain a space character because an empty property does
  not overwrite the default.
  </description>
</property>

<property>
  <name>http.accept</name>
  <value>text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</value>
  <description>Value of the "Accept" request header field. A space character
  as value will cause that no "Accept" header field is sent in the request.
  </description>
</property>

<property>
  <name>http.accept.charset</name>
  <value>utf-8,iso-8859-1;q=0.7,*;q=0.7</value>
  <description>Value of the "Accept-Charset" request header field. A space character
  as value will cause that no "Accept-Charset" header field is sent in the request.
  </description>
</property>

<property>
  <name>http.store.responsetime</name>
  <value>true</value>
  <description>Enables us to record the response time of the 
  host which is the time period between start connection to end 
  connection of a pages host. The response time in milliseconds
  is stored in CrawlDb in CrawlDatum's meta data under key &quot;_rs_&quot;
  </description>
</property>

<property>
  <name>http.enable.if.modified.since.header</name>
  <value>true</value>
  <description>Whether Nutch sends an HTTP If-Modified-Since header. It reduces
  bandwidth when enabled by not downloading pages that respond with an HTTP
  Not-Modified header. URL's that are not downloaded are not passed through
  parse or indexing filters. If you regularly modify filters, you should force
  Nutch to also download unmodified pages by disabling this feature.
  </description>
</property>

<property>
  <name>http.enable.cookie.header</name>
  <value>true</value>
  <description>Whether Nutch sends an HTTP Cookie header. The cookie value
  is read from the CrawlDatum Cookie metadata field.
  </description>
</property>

<!-- FTP properties -->

<property>
  <name>ftp.username</name>
  <value>anonymous</value>
  <description>ftp login username.</description>
</property>

<property>
  <name>ftp.password</name>
  <value>anonymous@example.com</value>
  <description>ftp login password.</description>
</property>

<property>
  <name>ftp.content.limit</name>
  <value>65536</value> 
  <description>The length limit for downloaded content, in bytes.
  If this value is nonnegative (>=0), content longer than it will be truncated;
  otherwise, no truncation at all.
  Caution: classical ftp RFCs never defines partial transfer and, in fact,
  some ftp servers out there do not handle client side forced close-down very
  well. Our implementation tries its best to handle such situations smoothly.
  </description>
</property>

<property>
  <name>ftp.timeout</name>
  <value>60000</value>
  <description>Default timeout for ftp client socket, in millisec.
  Please also see ftp.keep.connection below.</description>
</property>

<property>
  <name>ftp.server.timeout</name>
  <value>100000</value>
  <description>An estimation of ftp server idle time, in millisec.
  Typically it is 120000 millisec for many ftp servers out there.
  Better be conservative here. Together with ftp.timeout, it is used to
  decide if we need to delete (annihilate) current ftp.client instance and
  force to start another ftp.client instance anew. This is necessary because
  a fetcher thread may not be able to obtain next request from queue in time
  (due to idleness) before our ftp client times out or remote server
  disconnects. Used only when ftp.keep.connection is true (please see below).
  </description>
</property>

<property>
  <name>ftp.keep.connection</name>
  <value>false</value>
  <description>Whether to keep ftp connection. Useful if crawling same host
  again and again. When set to true, it avoids connection, login and dir list
  parser setup for subsequent urls. If it is set to true, however, you must
  make sure (roughly):
  (1) ftp.timeout is less than ftp.server.timeout
  (2) ftp.timeout is larger than (fetcher.threads.fetch * fetcher.server.delay)
  Otherwise there will be too many "delete client because idled too long"
  messages in thread logs.</description>
</property>

<property>
  <name>ftp.follow.talk</name>
  <value>false</value>
  <description>Whether to log dialogue between our client and remote
  server. Useful for debugging.</description>
</property>

<!-- web db properties -->
<property>
  <name>db.fetch.interval.default</name>
  <value>2592000</value>
  <description>The default number of seconds between re-fetches of a page (30 days).
  </description>
</property>

<property>
  <name>db.fetch.interval.max</name>
  <value>7776000</value>
  <description>The maximum number of seconds between re-fetches of a page
  (90 days). After this period every page in the db will be re-tried, no
  matter what is its status.
  </description>
</property>

<property>
  <name>db.fetch.schedule.class</name>
  <value>org.apache.nutch.crawl.DefaultFetchSchedule</value>
  <description>The implementation of fetch schedule. DefaultFetchSchedule simply
  adds the original fetchInterval to the last fetch time, regardless of
  page changes, whereas AdaptiveFetchSchedule (see below) tries to adapt
  to the rate at which a given page is changed. 
  </description>
</property>

<property>
  <name>db.fetch.schedule.adaptive.inc_rate</name>
  <value>0.4</value>
  <description>If a page is unmodified, its fetchInterval will be
  increased by this rate. This value should not
  exceed 0.5, otherwise the algorithm becomes unstable.</description>
</property>

<property>
  <name>db.fetch.schedule.adaptive.dec_rate</name>
  <value>0.2</value>
  <description>If a page is modified, its fetchInterval will be
  decreased by this rate. This value should not
  exceed 0.5, otherwise the algorithm becomes unstable.</description>
</property>

<property>
  <name>db.fetch.schedule.adaptive.min_interval</name>
  <value>60.0</value>
  <description>Minimum fetchInterval, in seconds.</description>
</property>

<property>
  <name>db.fetch.schedule.adaptive.max_interval</name>
  <value>31536000.0</value>
  <description>Maximum fetchInterval, in seconds (365 days).
  NOTE: this is limited by db.fetch.interval.max. Pages with
  fetchInterval larger than db.fetch.interval.max
  will be fetched anyway.</description>
</property>

<property>
  <name>db.fetch.schedule.adaptive.sync_delta</name>
  <value>true</value>
  <description>If true, try to synchronize with the time of page change.
  by shifting the next fetchTime by a fraction (sync_rate) of the difference
  between the last modification time, and the last fetch time.</description>
</property>

<property>
  <name>db.fetch.schedule.adaptive.sync_delta_rate</name>
  <value>0.3</value>
  <description>See sync_delta for description. This value should not
  exceed 0.5, otherwise the algorithm becomes unstable.</description>
</property>

<property>
  <name>db.fetch.schedule.mime.file</name>
  <value>adaptive-mimetypes.txt</value>
  <description>The configuration file for the MimeAdaptiveFetchSchedule.
  </description>
</property>

<property>
  <name>db.update.additions.allowed</name>
  <value>true</value>
  <description>If true, updatedb will add newly discovered URLs, if false
  only already existing URLs in the CrawlDb will be updated and no new
  URLs will be added.
  </description>
</property>

<property>
  <name>db.preserve.backup</name>
  <value>true</value>
  <description>If true, updatedb will keep a backup of the previous CrawlDB
  version in the old directory. In case of disaster, one can rename old to 
  current and restore the CrawlDB to its previous state.
  </description>
</property>

<property>
  <name>db.update.purge.404</name>
  <value>false</value>
  <description>If true, updatedb will add purge records with status DB_GONE
  from the CrawlDB.
  </description>
</property>

<property>
  <name>db.update.purge.orphans</name>
  <value>false</value>
  <description>If true, updatedb will permanently delete URL's marked
  as orphan from the CrawlDb. The plugin scoring-orphan needs to be
  activated to get records marked as orphan. See the plugin's options
  elsewhere in this document.
  </description>
</property>

<property>
    <name>crawldb.url.normalizers</name>
    <value>false</value>
    <description>
	!Temporary, can be overwritten with the command line!
	Normalize urls when updating crawldb
    </description>
</property>

<property>
    <name>crawldb.url.filters</name>
    <value>false</value>
    <description>
	!Temporary, can be overwritten with the command line!
	Filter urls when updating crawldb
    </description>
</property>

<property>
  <name>db.update.max.inlinks</name>
  <value>10000</value>
  <description>Maximum number of inlinks to take into account when updating 
  a URL score in the crawlDB. Only the best scoring inlinks are kept. 
  </description>
</property>

<property>
  <name>db.ignore.internal.links</name>
  <value>false</value>
  <description>If true, outlinks leading from a page to internal hosts or domain
  will be ignored. This is an effective way to limit the crawl to include
  only initially injected hosts or domains, without creating complex URLFilters.
  See 'db.ignore.external.links.mode'.
  </description>
</property>

<property>
  <name>db.ignore.external.links</name>
  <value>false</value>
  <description>If true, outlinks leading from a page to external hosts or domain
  will be ignored. This is an effective way to limit the crawl to include
  only initially injected hosts or domains, without creating complex URLFilters.
  See 'db.ignore.external.links.mode'.
  </description>
</property>

<property>
  <name>db.ignore.also.redirects</name>
  <value>true</value>
  <description>If true, the fetcher checks redirects the same way as
  links when ignoring internal or external links. Set to false to
  follow redirects despite the values for db.ignore.external.links and
  db.ignore.internal.links.
  </description>
</property>

<property>
  <name>db.ignore.external.links.mode</name>
  <value>byHost</value>
  <description>Alternative value is byDomain</description>
</property>

 <property>
  <name>db.ignore.external.exemptions.file</name>
  <value>db-ignore-external-exemptions.txt</value>
  <description>
    This file contains exemption rules used by 'urlfiter-ignoreexempt' plugin
  </description>
</property>

<property>
  <name>db.injector.overwrite</name>
  <value>false</value>
  <description>Whether existing records in the CrawlDB will be overwritten
  by injected records.
  </description>
</property>

<property>
  <name>db.injector.update</name>
  <value>false</value>
  <description>If true existing records in the CrawlDB will be updated with
  injected records. Old meta data is preserved. The db.injector.overwrite
  parameter has precedence.
  </description>
</property>

<property>
  <name>db.score.injected</name>
  <value>1.0</value>
  <description>The score of new pages added by the injector.
  </description>
</property>

<property>
  <name>db.score.link.external</name>
  <value>1.0</value>
  <description>The score factor for new pages added due to a link from
  another host relative to the referencing page's score. Scoring plugins
  may use this value to affect initial scores of external links.
  </description>
</property>

<property>
  <name>db.score.link.internal</name>
  <value>1.0</value>
  <description>The score factor for pages added due to a link from the
  same host, relative to the referencing page's score. Scoring plugins
  may use this value to affect initial scores of internal links.
  </description>
</property>

<property>
  <name>db.score.count.filtered</name>
  <value>false</value>
  <description>The score value passed to newly discovered pages is
  calculated as a fraction of the original page score divided by the
  number of outlinks. If this option is false, only the outlinks that passed
  URLFilters will count, if it's true then all outlinks will count.
  </description>
</property>

<property>
  <name>db.max.outlinks.per.page</name>
  <value>100</value>
  <description>The maximum number of outlinks that we'll process for a page.
  If this value is nonnegative (>=0), at most db.max.outlinks.per.page outlinks
  will be processed for a page; otherwise, all outlinks will be processed.
  </description>
</property>

<property>
  <name>db.max.outlink.length</name>
  <value>4096</value>
  <description>
    The maximum length in characters accepted for outlinks before
    applying URL normalizers and filters.  If this value is
    nonnegative (>=0), only URLs with a length in characters less or
    equal than db.max.outlink.length are accepted and then passed to
    URL normalizers and filters. Doing the length check beforehand
    avoids that normalizers or filters hang up on overlong URLs.
    Note: this property is only used to check URLs found as outlinks
    and redirects, but not for injected URLs.
  </description>
</property>

<property>
  <name>db.parsemeta.to.crawldb</name>
  <value></value>
  <description>Comma-separated list of parse metadata keys to transfer to the crawldb (NUTCH-779).
   Assuming for instance that the languageidentifier plugin is enabled, setting the value to 'lang' 
   will copy both the key 'lang' and its value to the corresponding entry in the crawldb.
  </description>
</property>

<property>
  <name>db.fetch.retry.max</name>
  <value>3</value>
  <description>The maximum number of times a url that has encountered
  recoverable errors is generated for fetch.</description>
</property>

<property>
  <name>db.signature.class</name>
  <value>org.apache.nutch.crawl.MD5Signature</value>
  <description>The default implementation of a page signature. Signatures
  created with this implementation will be used for duplicate detection
  and removal.</description>
</property>

<property>
  <name>db.signature.text_profile.min_token_len</name>
  <value>2</value>
  <description>Minimum token length to be included in the signature.
  </description>
</property>

<property>
  <name>db.signature.text_profile.quant_rate</name>
  <value>0.01</value>
  <description>Profile frequencies will be rounded down to a multiple of
  QUANT = (int)(QUANT_RATE * maxFreq), where maxFreq is a maximum token
  frequency. If maxFreq > 1 then QUANT will be at least 2, which means that
  for longer texts tokens with frequency 1 will always be discarded.
  </description>
</property>

<property>
  <name>db.stats.score.quantiles</name>
  <value>.01,.05,.1,.2,.25,.3,.4,.5,.6,.7,.75,.8,.9,.95,.99</value>
  <description>
    Quantiles of the distribution of CrawlDatum scores shown in the
    CrawlDb statistics (command `readdb -stats').  Comma-separated
    list of floating point numbers.
  </description>
</property>

<!-- linkdb properties -->

<property>
  <name>linkdb.max.inlinks</name>
  <value>10000</value>
  <description>Maximum number of Inlinks per URL to be kept in LinkDb.
  If "invertlinks" finds more inlinks than this number, only the first
  N inlinks will be stored, and the rest will be discarded.
  </description>
</property>

<property>
  <name>linkdb.ignore.internal.links</name>
  <value>true</value>
  <description>If true, when adding new links to a page, links from
  the same host are ignored.  This is an effective way to limit the
  size of the link database, keeping only the highest quality
  links.
  </description>
</property>

<property>
  <name>linkdb.ignore.external.links</name>
  <value>false</value>
  <description>If true, when adding new links to a page, links from
  the a different host are ignored.
  </description>
</property>

<property>
  <name>linkdb.max.anchor.length</name>
  <value>100</value>
  <description>
    The maximum number of characters permitted for anchor texts stored
    in LinkDb.
  </description>
</property>

<!-- generate properties -->

<property>
  <name>generate.max.count</name>
  <value>-1</value>
  <description>The maximum number of urls in a single
  fetchlist.  -1 if unlimited. The urls are counted according
  to the value of the parameter generator.count.mode.
  </description>
</property>

<property>
  <name>generate.count.mode</name>
  <value>host</value>
  <description>Determines how the URLs are counted for generator.max.count.
  Default value is 'host' but can be 'domain'. Note that we do not count 
  per IP in the new version of the Generator.
  </description>
</property>

<property>
  <name>generate.update.crawldb</name>
  <value>false</value>
  <description>For highly-concurrent environments, where several
  generate/fetch/update cycles may overlap, setting this to true ensures
  that generate will create different fetchlists even without intervening
  updatedb-s, at the cost of running an additional job to update CrawlDB.
  If false, running generate twice without intervening
  updatedb will generate identical fetchlists.</description>
</property>

<property>
  <name>generate.min.score</name>
  <value>0</value>
  <description>Select only entries with a score larger than
  generate.min.score.</description>
</property>

<property>
  <name>generate.min.interval</name>
  <value>-1</value>
  <description>Select only entries with a retry interval lower than
  generate.min.interval. A value of -1 disables this check.</description>
</property>

<property>
  <name>generate.hostdb</name>
  <value></value>
  <description>Path to HostDB, required for the generate.max.count.expr
  and generate.fetch.delay.expr properties.
  See https://issues.apache.org/jira/browse/NUTCH-2368</description>
</property>

<property>
  <name>generate.fetch.delay.expr</name>
  <value></value>
  <description>Controls variable fetcher.server.delay via a Jexl expression and
  HostDB information. It allows you to alter fetch delay based on HostDB data.
  See https://issues.apache.org/jira/browse/NUTCH-2368</description>
</property>

<property>
  <name>generate.max.count.expr</name>
  <value></value>
  <description>Controls variable generate.max.count via a Jexl expression and
  HostDB information. It allows you to alter maxCount based on HostDB data.
  See https://issues.apache.org/jira/browse/NUTCH-2368</description>
</property>

<!-- urlpartitioner properties -->

<property>
  <name>partition.url.mode</name>
  <value>byHost</value>
  <description>Determines how to partition URLs. Default value is 'byHost', 
  also takes 'byDomain' or 'byIP'. 
  </description>
</property>

<property>
  <name>crawl.gen.delay</name>
  <value>604800000</value>
  <description>
   This value, expressed in milliseconds, defines how long we should keep the lock on records 
   in CrawlDb that were just selected for fetching. If these records are not updated 
   in the meantime, the lock is canceled, i.e. they become eligible for selecting. 
   Default value of this is 7 days (604800000 ms).
  </description>
</property>

<!-- fetcher properties -->

<property>
  <name>fetcher.server.delay</name>
  <value>5.0</value>
  <description>The number of seconds the fetcher will delay between 
   successive requests to the same server. Note that this might get
   overridden by a Crawl-Delay from a robots.txt and is used ONLY if 
   fetcher.threads.per.queue is set to 1.
   </description>
</property>

<property>
  <name>fetcher.server.min.delay</name>
  <value>0.0</value>
  <description>The minimum number of seconds the fetcher will delay between 
  successive requests to the same server. This value is applicable ONLY
  if fetcher.threads.per.queue is greater than 1 (i.e. the host blocking
  is turned off).</description>
</property>

<property>
 <name>fetcher.max.crawl.delay</name>
 <value>30</value>
 <description>
 If the Crawl-Delay in robots.txt is set to greater than this value (in
 seconds) then the fetcher will skip this page, generating an error report.
 If set to -1 the fetcher will never skip such pages and will wait the
 amount of time retrieved from robots.txt Crawl-Delay, however long that
 might be.
 </description>
</property> 

<property>
  <name>fetcher.threads.fetch</name>
  <value>10</value>
  <description>The number of FetcherThreads the fetcher should use.
  This is also determines the maximum number of requests that are
  made at once (each FetcherThread handles one connection). The total
  number of threads running in distributed mode will be the number of
  fetcher threads * number of nodes as fetcher has one map task per node.
  </description>
</property>

<property>
  <name>fetcher.threads.per.queue</name>
  <value>1</value>
  <description>This number is the maximum number of threads that
    should be allowed to access a queue at one time. Setting it to 
    a value > 1 will cause the Crawl-Delay value from robots.txt to
    be ignored and the value of fetcher.server.min.delay to be used
    as a delay between successive requests to the same server instead 
    of fetcher.server.delay.
   </description>
</property>

<property>
  <name>fetcher.queue.mode</name>
  <value>byHost</value>
  <description>Determines how to put URLs into queues. Default value
  is 'byHost', also takes 'byDomain' or 'byIP'. Crawl delays are
  implemented on the level of fetcher queues.
  </description>
</property>

<property>
  <name>fetcher.verbose</name>
  <value>false</value>
  <description>If true, fetcher will log more verbosely.</description>
</property>

<property>
  <name>fetcher.parse</name>
  <value>false</value>
  <description>If true, fetcher will parse content. Default is false, which means
  that a separate parsing step is required after fetching is finished.</description>
</property>

<property>
  <name>fetcher.store.content</name>
  <value>true</value>
  <description>If true, fetcher will store content.</description>
</property>

<property>
  <name>fetcher.signature</name>
  <value>false</value>
  <description>If true, fetcher will generate the signature for
  successfully fetched documents even if the content is not parsed by
  fetcher (see property fetcher.parse).  Default is false, which means
  that the signature is calculated when parsing either by the fetcher
  or during the parsing step.  Note that a non-parsing fetcher can
  only generate signatures based on the binary content and not on the
  textual content. An appropriate signature class should be chosen
  (see property db.signature.class).
  </description>
</property>

<property>
  <name>fetcher.timelimit.mins</name>
  <value>-1</value>
  <description>This is the number of minutes allocated to the fetching.
  Once this value is reached, any remaining entry from the input URL list is skipped 
  and all active queues are emptied. The default value of -1 deactivates the time limit.
  </description>
</property>

<property>
  <name>fetcher.max.exceptions.per.queue</name>
  <value>-1</value>
  <description>The maximum number of protocol-level exceptions (e.g. timeouts) per
  host (or IP) queue. Once this value is reached, any remaining entries from this
  queue are purged, effectively stopping the fetching from this host/IP. The default
  value of -1 deactivates this limit.
  </description>
</property>

<property>
  <name>fetcher.throughput.threshold.pages</name>
  <value>-1</value>
  <description>The threshold of minimum pages per second. If the fetcher downloads less
  pages per second than the configured threshold, the fetcher stops, preventing slow queue's
  from stalling the throughput. This threshold must be an integer. This can be useful when
  fetcher.timelimit.mins is hard to determine. The default value of -1 disables this check.
  </description>
</property>

<property>
  <name>fetcher.throughput.threshold.retries</name>
  <value>5</value>
  <description>The number of times the fetcher.throughput.threshold is allowed to be exceeded.
  This settings prevents accidental slow downs from immediately killing the fetcher thread.
  </description>
</property>

<property>
  <name>fetcher.throughput.threshold.check.after</name>
  <value>5</value>
  <description>The number of minutes after which the throughput check is enabled.</description>
</property>

<property>
  <name>fetcher.threads.timeout.divisor</name>
  <value>2</value>
  <description>(EXPERT)The thread time-out divisor to use. By default threads have a time-out
  value of mapreduce.task.timeout / 2. Increase this setting if the fetcher waits too
  long before killing hanged threads. Be careful, a too high setting (+8) will most likely kill the
  fetcher threads prematurely.
  </description>
</property>

<property>
  <name>fetcher.queue.depth.multiplier</name>
  <value>50</value>
  <description>(EXPERT)The fetcher buffers the incoming URLs into queues based on the [host|domain|IP]
  (see param fetcher.queue.mode). The depth of the queue is the number of threads times the value of this parameter.
  A large value requires more memory but can improve the performance of the fetch when the order of the URLS in the fetch list
  is not optimal.
  </description>
</property>

<property>
  <name>fetcher.follow.outlinks.depth</name>
  <value>-1</value>
  <description>(EXPERT)When fetcher.parse is true and this value is greater than 0 the fetcher will extract outlinks
  and follow until the desired depth is reached. A value of 1 means all generated pages are fetched and their first degree
  outlinks are fetched and parsed too. Be careful, this feature is in itself agnostic of the state of the CrawlDB and does not
  know about already fetched pages. A setting larger than 2 will most likely fetch home pages twice in the same fetch cycle.
  It is highly recommended to set db.ignore.external.links to true to restrict the outlink follower to URL's within the same
  domain. When disabled (false) the feature is likely to follow duplicates even when depth=1.
  A value of -1 of 0 disables this feature.
  </description>
</property>

<property>
  <name>fetcher.follow.outlinks.num.links</name>
  <value>4</value>
  <description>(EXPERT)The number of outlinks to follow when fetcher.follow.outlinks.depth is enabled. Be careful, this can multiply
  the total number of pages to fetch. This works with fetcher.follow.outlinks.depth.divisor, by default settings the followed outlinks
  at depth 1 is 8, not 4.
  </description>
</property>

<property>
  <name>fetcher.follow.outlinks.depth.divisor</name>
  <value>2</value>
  <description>(EXPERT)The divisor of fetcher.follow.outlinks.num.links per fetcher.follow.outlinks.depth. This decreases the number
  of outlinks to follow by increasing depth. The formula used is: outlinks = floor(divisor / depth * num.links). This prevents
  exponential growth of the fetch list.
  </description>
</property>

<property>
  <name>fetcher.follow.outlinks.ignore.external</name>
  <value>true</value>  
  <description>Whether to ignore or follow external links. Set db.ignore.external.links to false and this to true to store outlinks
  in the output but not follow them. If db.ignore.external.links is true this directive is ignored.
  </description>
</property>

<property>
  <name>fetcher.bandwidth.target</name>
  <value>-1</value>  
  <description>Target bandwidth in kilobits per sec for each mapper instance. This is used to adjust the number of 
  fetching threads automatically (up to fetcher.maxNum.threads). A value of -1 deactivates the functionality, in which case
  the number of fetching threads is fixed (see fetcher.threads.fetch).</description>
</property>

<property>
  <name>fetcher.maxNum.threads</name>
  <value>25</value>  
  <description>Max number of fetch threads allowed when using fetcher.bandwidth.target. Defaults to fetcher.threads.fetch if unspecified or
  set to a value lower than it. </description>
</property>

<property>
  <name>fetcher.bandwidth.target.check.everyNSecs</name>
  <value>30</value>  
  <description>(EXPERT) Value in seconds which determines how frequently we should reassess the optimal number of fetch threads when using
   fetcher.bandwidth.target. Defaults to 30 and must be at least 1.</description>
</property>

<property>

  <name>fetcher.store.robotstxt</name>
  <value>false</value>
  <description>If true (and fetcher.store.content is also true),
  fetcher will store the robots.txt response content and status for
  debugging or archival purposes. The robots.txt is added to the
  content/ folder of the fetched segment.
  </description>
</property>

<property>
	<name>fetcher.publisher</name>
	<value>false</value>
	<description>Set this value to true if you want to use an implementation of the Publisher/Subscriber model. Make sure to set corresponding
	Publisher implementation specific properties</description>
</property> 

<!--  any23 plugin properties -->

<property>
    <name>any23.extractors</name>
    <value>html-microdata</value>
    <description>Comma-separated list of Any23 extractors (a list of extractors is available here: http://any23.apache.org/getting-started.html)</description>
</property>

<property>
    <name>any23.content_types</name>
    <value>text/html,application/xhtml+xml</value>
    <description>Comma-separated list of content-types onto which Any23 extractors should be applied (see http://www.iana.org/assignments/media-types/). If empty, all content-types are supported.</description>
</property>

<!-- moreindexingfilter plugin properties -->

<property>
  <name>moreIndexingFilter.indexMimeTypeParts</name>
  <value>true</value>
  <description>Determines whether the index-more plugin will split the mime-type
  in sub parts, this requires the type field to be multi valued. Set to true for backward
  compatibility. False will not split the mime-type.
  </description>
</property>

<property>
  <name>moreIndexingFilter.mapMimeTypes</name>
  <value>false</value>
  <description>Determines whether MIME-type mapping is enabled. It takes a
  plain text file with mapped MIME-types. With it the user can map both
  application/xhtml+xml and text/html to the same target MIME-type so it
  can be treated equally in an index. See conf/contenttype-mapping.txt.
  </description>
</property>

<property>
  <name>moreIndexingFilter.mapMimeTypes.field</name>
  <value></value>
  <description>It's used if moreIndexingFilter.mapMimeTypes is true. Indicates the field
  where the mapped MIME-type must be written. If it's null, the field "type"
  will be replaced by the mapped MIME-type.
  </description>
</property>

<!-- AnchorIndexing filter plugin properties -->

<property>
  <name>anchorIndexingFilter.deduplicate</name>
  <value>false</value>
  <description>With this enabled the indexer will case-insensitive deduplicate anchors
  before indexing. This prevents possible hundreds or thousands of identical anchors for
  a given page to be indexed but will affect the search scoring (i.e. tf=1.0f).
  </description>
</property>

<!-- indexingfilter plugin properties -->

<property>
  <name>indexingfilter.order</name>
  <value></value>
  <description>The order by which index filters are applied.
  If empty, all available index filters (as dictated by properties
  plugin-includes and plugin-excludes above) are loaded and applied in system
  defined order. If not empty, only named filters are loaded and applied
  in given order. For example, if this property has value:
  org.apache.nutch.indexer.basic.BasicIndexingFilter org.apache.nutch.indexer.more.MoreIndexingFilter
  then BasicIndexingFilter is applied first, and MoreIndexingFilter second.
  
  Filter ordering might have impact on result if one filter depends on output of
  another filter.
  </description>
</property>

<property>
  <name>indexer.score.power</name>
  <value>0.5</value>
  <description>Determines the power of link analyis scores.  Each
  pages's boost is set to <i>score<sup>scorePower</sup></i> where
  <i>score</i> is its link analysis score and <i>scorePower</i> is the
  value of this parameter.  This is compiled into indexes, so, when
  this is changed, pages must be re-indexed for it to take
  effect.</description>
</property>

<property>
  <name>indexer.max.title.length</name>
  <value>100</value>
  <description>The maximum number of characters of a title that are indexed. A value of -1 disables this check.
  </description>
</property>

<property>
  <name>indexer.max.content.length</name>
  <value>-1</value>
  <description>The maximum number of characters of a content that are indexed.
  Content beyond the limit is truncated. A value of -1 disables this check.
  </description>
</property>

<property>
  <name>indexer.add.domain</name>
  <value>false</value>
  <description>Whether to add the domain field to a NutchDocument.</description>
</property>

<property>
  <name>indexer.skip.notmodified</name>
  <value>false</value>
  <description>Whether the indexer will skip records with a db_notmodified status.
  </description>
</property>

<property>
  <name>indexer.delete.robots.noindex</name>
  <value>false</value>
  <description>Whether the indexer will delete documents marked by robots=noindex
  </description>
</property>

<property>
  <name>indexer.delete.skipped.by.indexingfilter</name>
  <value>false</value>
  <description>Whether the indexer will delete documents that were skipped by indexing filters
  </description>
</property>

<!-- URL normalizer properties -->

<property>
  <name>urlnormalizer.order</name>
  <value>org.apache.nutch.net.urlnormalizer.basic.BasicURLNormalizer org.apache.nutch.net.urlnormalizer.regex.RegexURLNormalizer</value>
  <description>Order in which normalizers will run. If any of these isn't
  activated it will be silently skipped. If other normalizers not on the
  list are activated, they will run in random order after the ones
  specified here are run.
  </description>
</property>

<property>
  <name>urlnormalizer.regex.file</name>
  <value>regex-normalize.xml</value>
  <description>Name of the config file used by the RegexUrlNormalizer class.
  </description>
</property>

<property>
  <name>urlnormalizer.loop.count</name>
  <value>1</value>
  <description>Optionally loop through normalizers several times, to make
  sure that all transformations have been performed.
  </description>
</property>

<!-- mime properties -->

<!--
<property>
  <name>mime.types.file</name>
  <value>tika-mimetypes.xml</value>
  <description>Name of file in CLASSPATH containing filename extension and
  magic sequence to mime types mapping information. Overrides the default Tika config 
  if specified.
  </description>
</property>
-->

<property>
  <name>mime.type.magic</name>
  <value>true</value>
  <description>Defines if the mime content type detector uses magic resolution.
  </description>
</property>

<!-- plugin properties -->

<property>
  <name>plugin.folders</name>
  <value>plugins</value>
  <description>Directories where nutch plugins are located.  Each
  element may be a relative or absolute path.  If absolute, it is used
  as is.  If relative, it is searched for on the classpath.</description>
</property>

<property>
  <name>plugin.auto-activation</name>
  <value>true</value>
  <description>Defines if some plugins that are not activated regarding
  the plugin.includes and plugin.excludes properties must be automatically
  activated if they are needed by some active plugins.
  </description>
</property>

<property>
  <name>plugin.includes</name>
  <value>protocol-http|urlfilter-(regex|validator)|parse-(html|tika)|index-(basic|anchor)|indexer-solr|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
  <description>Regular expression naming plugin directory names to
  include.  Any plugin not matching this expression is excluded.
  In any case you need at least include the nutch-extensionpoints plugin. By
  default Nutch includes crawling just HTML and plain text via HTTP,
  and basic indexing and search plugins. In order to use HTTPS please enable 
  protocol-httpclient, but be aware of possible intermittent problems with the 
  underlying commons-httpclient library. Set parsefilter-naivebayes for classification based focused crawler.
  </description>
</property>

<property>
  <name>plugin.excludes</name>
  <value></value>
  <description>Regular expression naming plugin directory names to exclude.  
  </description>
</property>

<property>
  <name>urlmeta.tags</name>
  <value></value>
  <description>
    To be used in conjunction with features introduced in NUTCH-655, which allows
    for custom metatags to be injected alongside your crawl URLs. Specifying those
    custom tags here will allow for their propagation into a pages outlinks, as
    well as allow for them to be included as part of an index.
    Values should be comma-delimited. ("tag1,tag2,tag3") Do not pad the tags with
    white-space at their boundaries, if you are using anything earlier than Hadoop-0.21. 
  </description>
</property>

<!-- parser properties -->

<property>
  <name>parse.plugin.file</name>
  <value>parse-plugins.xml</value>
  <description>The name of the file that defines the associations between
  content-types and parsers.</description>
</property>

<property>
  <name>parser.character.encoding.default</name>
  <value>windows-1252</value>
  <description>The character encoding to fall back to when no other information
  is available</description>
</property>

<property>
  <name>encodingdetector.charset.min.confidence</name>
  <value>-1</value>
  <description>A integer between 0-100 indicating minimum confidence value
  for charset auto-detection. Any negative value disables auto-detection.
  </description>
</property>

<property>
  <name>parser.caching.forbidden.policy</name>
  <value>content</value>
  <description>If a site (or a page) requests through its robot metatags
  that it should not be shown as cached content, apply this policy. Currently
  three keywords are recognized: "none" ignores any "noarchive" directives.
  "content" doesn't show the content, but shows summaries (snippets).
  "all" doesn't show either content or summaries.</description>
</property>

<property>
  <name>parser.html.impl</name>
  <value>neko</value>
  <description>HTML Parser implementation. Currently the following keywords
  are recognized: "neko" uses NekoHTML, "tagsoup" uses TagSoup.
  </description>
</property>

<property>
  <name>parser.html.form.use_action</name>
  <value>false</value>
  <description>If true, HTML parser will collect URLs from form action
  attributes. This may lead to undesirable behavior (submitting empty
  forms during next fetch cycle). If false, form action attribute will
  be ignored.</description>
</property>

<property>
  <name>parser.html.outlinks.ignore_tags</name>
  <value></value>
  <description>Comma separated list of HTML tags, from which outlinks 
  shouldn't be extracted. Nutch takes links from: a, area, form, frame, 
  iframe, script, link, img. If you add any of those tags here, it
  won't be taken. Default is empty list. Probably reasonable value
  for most people would be "img,script,link".</description>
</property>

<property>
	<name>parser.html.outlinks.htmlnode_metadata_name</name>
	<value></value>
	<description>if not empty, the source nodename of a found outlink will
		be set in the metadata with this name into the outlink</description>
</property>

<property>
  <name>parser.html.line.separators</name>
  <value>article,aside,blockquote,canvas,dd,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hr,li,main,nav,noscript,ol,output,p,pre,section,table,tfoot,ul,video</value>
 <description>Comma separated list of HTML tags. Newline will be added to the
  parsed text after these tages.
  The default list above are the block-level HTML elements.
  Tags must be in lower case.
  To disable this feature, leave the list empty.</description>
</property>

<property>
  <name>htmlparsefilter.order</name>
  <value></value>
  <description>The order by which HTMLParse filters are applied.
  If empty, all available HTMLParse filters (as dictated by properties
  plugin-includes and plugin-excludes above) are loaded and applied in system
  defined order. If not empty, only named filters are loaded and applied
  in given order.
  HTMLParse filter ordering MAY have an impact
  on end result, as some filters could rely on the metadata generated by a previous filter.
  </description>
</property>

<property>
  <name>parsefilter.naivebayes.trainfile</name>
  <value>naivebayes-train.txt</value>
  <description>Set the name of the file to be used for Naive Bayes training. The format will be: 
Each line contains two tab separated parts
There are two columns/parts:
1. "1" or "0", "1" for relevant and "0" for irrelevant documents.
2. Text (text that will be used for training)

Each row will be considered a new "document" for the classifier.
CAUTION: Set the parser.timeout to -1 or a bigger value than 30, when using this classifier.
  </description>
</property>

<property>
  <name>parsefilter.naivebayes.wordlist</name>
  <value>naivebayes-wordlist.txt</value>
  <description>Put the name of the file you want to be used as a list of 
  important words to be matched in the url for the model filter. The format should be one word per line.
  </description>
</property>

<property>
  <name>parser.timeout</name>
  <value>30</value>
  <description>Timeout in seconds for the parsing of a document, otherwise treats it as an exception and 
  moves on the the following documents. This parameter is applied to any Parser implementation. 
  Set to -1 to deactivate, bearing in mind that this could cause
  the parsing to crash because of a very long or corrupted document.
  </description>
</property>

<property>
  <name>parse.filter.urls</name>
  <value>true</value>
  <description>Whether the parser will filter URLs (with the configured URL filters).</description>
</property>

<property>
  <name>parse.normalize.urls</name>
  <value>true</value>
  <description>Whether the parser will normalize URLs (with the configured URL normalizers).</description>
</property>

<property>
  <name>parser.skip.truncated</name>
  <value>true</value>
  <description>Boolean value for whether we should skip parsing for truncated documents. By default this 
  property is activated due to extremely high levels of CPU which parsing can sometimes take.  
  </description>
</property>

<property>
  <name>parser.store.text</name>
  <value>true</value>
  <description>If true (default value), parser will store parse text (parse_text directory within the segment).</description>
</property>


<!--
<property>
  <name>tika.htmlmapper.classname</name>
  <value>org.apache.tika.parser.html.IdentityHtmlMapper</value>
  <description>Classname of Tika HTMLMapper to use. Influences the elements included in the DOM and hence
  the behavior of the HTMLParseFilters.
  </description>
</property>
-->

<property>
 <name>tika.config.file</name>
 <value>tika-config.xml</value>
 <description>Nutch-specific Tika config file</description>
</property>

<property>
  <name>tika.uppercase.element.names</name>
  <value>true</value>
  <description>Determines whether TikaParser should uppercase the element name while generating the DOM
  for a page, as done by Neko (used per default by parse-html)(see NUTCH-1592).
  </description>
</property>

<property>
  <name>tika.extractor</name>
  <value>none</value>
  <description>
  Which text extraction algorithm to use. Valid values are: boilerpipe or none.
  </description>
</property>

<property> 
  <name>tika.extractor.boilerpipe.algorithm</name>
  <value>ArticleExtractor</value>
  <description> 
  Which Boilerpipe algorithm to use. Valid values are: DefaultExtractor, ArticleExtractor
  or CanolaExtractor.
  </description>
</property>

<!-- urlfilter plugin properties -->

<property>
  <name>urlfilter.domain.file</name>
  <value>domain-urlfilter.txt</value>
  <description>Name of file on CLASSPATH containing either top level domains or
  hostnames used by urlfilter-domain (DomainURLFilter) plugin.</description>
</property>

<property>
  <name>urlfilter.regex.file</name>
  <value>regex-urlfilter.txt</value>
  <description>Name of file on CLASSPATH containing regular expressions
  used by urlfilter-regex (RegexURLFilter) plugin.</description>
</property>

<property>
  <name>urlfilter.automaton.file</name>
  <value>automaton-urlfilter.txt</value>
  <description>Name of file on CLASSPATH containing regular expressions
  used by urlfilter-automaton (AutomatonURLFilter) plugin.</description>
</property>

<property>
  <name>urlfilter.prefix.file</name>
  <value>prefix-urlfilter.txt</value>
  <description>Name of file on CLASSPATH containing url prefixes
  used by urlfilter-prefix (PrefixURLFilter) plugin.</description>
</property>

<property>
  <name>urlfilter.suffix.file</name>
  <value>suffix-urlfilter.txt</value>
  <description>Name of file on CLASSPATH containing url suffixes
  used by urlfilter-suffix (SuffixURLFilter) plugin.</description>
</property>

<property>
  <name>urlfilter.order</name>
  <value></value>
  <description>The order by which url filters are applied.
  If empty, all available url filters (as dictated by properties
  plugin-includes and plugin-excludes above) are loaded and applied in system
  defined order. If not empty, only named filters are loaded and applied
  in given order. For example, if this property has value:
  org.apache.nutch.urlfilter.regex.RegexURLFilter org.apache.nutch.urlfilter.prefix.PrefixURLFilter
  then RegexURLFilter is applied first, and PrefixURLFilter second.
  Since all filters are AND'ed, filter ordering does not have impact
  on end result, but it may have performance implication, depending
  on relative expensiveness of filters.
  </description>
</property>

<!-- scoring filters properties -->

<property>
  <name>scoring.filter.order</name>
  <value></value>
  <description>The order in which scoring filters are applied.  This
  may be left empty (in which case all available scoring filters will
  be applied in system defined order), or a space separated list of
  implementation classes.
  </description>
</property>

<!-- scoring-depth properties
 Add 'scoring-depth' to the list of active plugins
 in the parameter 'plugin.includes' in order to use it.
 -->

<property>
  <name>scoring.depth.max</name>
  <value>1000</value>
  <description>Max depth value from seed allowed by default.
  Can be overridden on a per-seed basis by specifying "_maxdepth_=VALUE"
  as a seed metadata. This plugin adds a "_depth_" metadatum to the pages
  to track the distance from the seed it was found from. 
  The depth is used to prioritise URLs in the generation step so that
  shallower pages are fetched first.
  </description>
</property>

<!-- scoring similarity properties
Add scoring-similarity to the list of active plugins
 in the parameter 'plugin.includes' in order to use it. 
For more detailed information on the working of this filter 
visit https://wiki.apache.org/nutch/SimilarityScoringFilter-->

<property>
    <name>scoring.similarity.model</name>
    <value>cosine</value>
    <description>The type of similarity metric to use. Eg - cosine (which is, currently, the only available model).
      Please make sure to set the model specific properties for the scoring to function properly. 
      Description of these properties can be found on the wiki.
    </description>
</property>

 <property>
  <name>scoring.similarity.ngrams</name>
  <value>1,1</value>
  <description>Specifies the min 'n' and max 'n' in ngrams as comma-separated.
    If one value is specified as 'n', it will be used for both the min 'n' and max 'n' in ngrams.
  </description>
</property>

<property>
    <name>cosine.goldstandard.file</name>
    <value>goldstandard.txt</value>
    <description>Path to the gold standard file which contains all the relevant text and terms, 
      pertaining to the domain.
    </description>
</property>

 <property>
    <name>scoring.similarity.stopword.file</name>
    <value>stopwords.txt</value>
    <description>Name of the stopword text file. The user can specify a custom list of stop words 
      in a text file. Each new stopword should be on a new line.
    </description>
</property>

<!-- scoring filter orphan properties -->

<property>
  <name>scoring.orphan.mark.gone.after</name>
  <value>2592000</value>
  <description>Time in seconds after which orphaned
  pages are marked as gone. Default is 30 days.
  </description>
</property>

<property>
  <name>scoring.orphan.mark.orphan.after</name>
  <value>3456000</value>
  <description>Time in seconds after which orphaned
  pages are marked as gone. Default is 40 days.
  </description>
</property>

<!-- language-identifier plugin properties -->

<property>
  <name>lang.analyze.max.length</name>
  <value>2048</value>
  <description> The maximum number of bytes used to identify
  the language (0 means full content analysis).
  The larger is this value, the better is the analysis, but the
  slowest it is.
  </description>
</property>

<property>
  <name>lang.extraction.policy</name>
  <value>detect,identify</value>
  <description>This determines when the plugin uses detection and
  statistical identification mechanisms. The order in which the
  detect and identify are written will determine the extraction
  policy. Default case (detect,identify)  means the plugin will
  first try to extract language info from page headers and metadata,
  if this is not successful it will try using tika language
  identification. Possible values are:
    detect
    identify
    detect,identify
    identify,detect
  </description>
</property>

<property>
  <name>lang.identification.only.certain</name>
  <value>false</value>
  <description>If set to true with lang.extraction.policy containing identify,
  the language code returned by Tika will be assigned to the document ONLY
  if it is deemed certain by Tika.
  </description>
</property>

<property>
  <name>lang.index.languages</name>
  <value></value>
  <description>If not empty, should be a comma separated list of language codes.
  Only documents with one of these language codes will be indexed.
  "unknown" is a valid language code, will match documents where language
  detection failed.
  </description>
</property>

<!-- index-jexl-filter plugin properties -->

<property>
  <name>index.jexl.filter</name>
  <value></value>
  <description> A JEXL expression. If it evaluates to false,
  the document will not be indexed.
  Available primitives in the JEXL context:
  * status, fetchTime, modifiedTime, retries, interval, score, signature, url, text, title
  Available objects in the JEXL context:
  * httpStatus - contains majorCode, minorCode, message
  * documentMeta, contentMeta, parseMeta - contain all the Metadata properties.
    each property value is always an array of Strings (so if you expect one value, use [0])
  * doc - contains all the NutchFields from the NutchDocument.
    each property value is always an array of Objects.
  </description>
</property>

<!-- index-static plugin properties -->

<property>
  <name>index.static</name>
  <value></value>
  <description>
  Used by plugin index-static to adds fields with static data at indexing time. 
  You can specify a comma-separated list of fieldname:fieldcontent per Nutch job.
  Each fieldcontent can have multiple values separated by space, e.g.,
    field1:value1.1 value1.2 value1.3,field2:value2.1 value2.2 ...
  It can be useful when collections can't be created by URL patterns, 
  like in subcollection, but on a job-basis.
  </description>
</property>

<property>
  <name>index.static.fieldsep</name>
  <value>,</value>
  <description>
  Used by plugin index-static to parse the property index.static.  Default: comma.
  This delimiter is used to separate individual field specifications in the property.
  </description>
</property>

<property>
  <name>index.static.keysep</name>
  <value>:</value>
  <description>
  Used by plugin index-static to parse the property index.static.  Default: colon.
  This delimiter is used to separate the field name from the field value in the field specification.
  </description>
</property>

<property>
  <name>index.static.valuesep</name>
  <value> </value>
  <description>
  Used by plugin index-static to parse the property index.static.  Default: space.
  This delimiter is used to separate multiple field values in the value setting of the field specification.
  </description>
</property>


<!-- index-metadata plugin properties -->

<property>
  <name>index.parse.md</name>
  <value>metatag.description,metatag.keywords</value>
  <description>
  Comma-separated list of keys to be taken from the parse metadata to generate fields.
  Can be used e.g. for 'description' or 'keywords' provided that these values are generated
  by a parser (see parse-metatags plugin)  
  </description>
</property>

<property>
  <name>index.content.md</name>
  <value></value>
  <description>
   Comma-separated list of keys to be taken from the content metadata to generate fields. 
  </description>
</property>

<property>
  <name>index.db.md</name>
  <value></value>
  <description>
     Comma-separated list of keys to be taken from the crawldb metadata to generate fields.
     Can be used to index values propagated from the seeds with the plugin urlmeta 
  </description>
</property>

<property>
  <name>index.metadata.separator</name>
  <value></value>
  <description>
   Separator to use if you want to index multiple values for a given field. Leave empty to
   treat each value as a single value.
  </description>
</property>

<!-- index-geoip plugin properties -->
<property>
  <name>index.geoip.usage</name>
  <value>insightsService</value>
  <description>
  A string representing the information source to be used for GeoIP information
  association. Either enter 'cityDatabase', 'connectionTypeDatabase', 
  'domainDatabase', 'ispDatabase' or 'insightsService'. If you wish to use any one of the 
  Database options, you should make one of GeoIP2-City.mmdb, GeoIP2-Connection-Type.mmdb, 
  GeoIP2-Domain.mmdb or GeoIP2-ISP.mmdb files respectively available on the classpath and
  available at runtime.
  </description>
</property>

<property>
  <name>index.geoip.userid</name>
  <value></value>
  <description>
  The userId associated with the GeoIP2 Precision Services account.
  </description>
</property>

<property>
  <name>index.geoip.licensekey</name>
  <value></value>
  <description>
  The license key associated with the GeoIP2 Precision Services account.
  </description>
</property>

<property>
  <name>index.replace.regexp</name>
  <value/>
  <description>Allows indexing-time regexp replace manipulation of metadata fields.
    The format of the property is a list of regexp replacements, one line per field being
    modified.  Include index-replace in your plugin.includes.

    Example:
        hostmatch=.*somedomain.com
        fldname1=/regexp/replacement/flags
        fldname2=/regexp/replacement/flags

    Field names would be one of those from https://wiki.apache.org/nutch/IndexStructure.
    See https://wiki.apache.org/nutch/IndexReplace for further details.
  </description>
</property>

<!-- parse-metatags plugin properties -->
<property>
  <name>metatags.names</name>
  <value>description,keywords</value>
  <description> Names of the metatags to extract, separated by ','.
  Use '*' to extract all metatags. Prefixes the names with 'metatag.'
  in the parse-metadata. For instance to index description and keywords, 
  you need to activate the plugin index-metadata and set the value of the 
  parameter 'index.parse.md' to 'metatag.description,metatag.keywords'.
  </description>
</property>

<!-- Temporary Hadoop 0.17.x workaround. -->

<property>
  <name>hadoop.job.history.user.location</name>
  <value>${hadoop.log.dir}/history/user</value>
  <description>Hadoop 0.17.x comes with a default setting to create
     user logs inside the output path of the job. This breaks some
     Hadoop classes, which expect the output to contain only
     part-XXXXX files. This setting changes the output to a
     subdirectory of the regular log directory.
  </description>
</property>

<property>
  <name>io.serializations</name>
  <value>org.apache.hadoop.io.serializer.WritableSerialization,org.apache.hadoop.io.serializer.JavaSerialization</value>
  <!-- org.apache.hadoop.io.serializer.avro.AvroSpecificSerialization,
  org.apache.hadoop.io.serializer.avro.AvroReflectSerialization,
  org.apache.hadoop.io.serializer.avro.AvroGenericSerialization, -->
  <description>A list of serialization classes that can be used for
  obtaining serializers and deserializers.</description>
</property>

<!-- linkrank scoring properties -->

<property>
  <name>link.ignore.internal.host</name>
  <value>true</value>
  <description>Ignore outlinks to the same hostname.</description>
</property>

<property>
  <name>link.ignore.internal.domain</name>
  <value>true</value>
  <description>Ignore outlinks to the same domain.</description>
</property>

<property>
  <name>link.ignore.limit.page</name>
  <value>true</value>
  <description>Limit to only a single outlink to the same page.</description>
</property>

<property>
  <name>link.ignore.limit.domain</name>
  <value>true</value>
  <description>Limit to only a single outlink to the same domain.</description>
</property> 

<property>
  <name>link.analyze.num.iterations</name>
  <value>10</value>
  <description>The number of LinkRank iterations to run.</description>
</property>

<property>
  <name>link.analyze.initial.score</name>
  <value>1.0f</value>
  <description>The initial score.</description>
</property>

<property>
  <name>link.analyze.damping.factor</name>
  <value>0.85f</value>
  <description>The damping factor.</description>
</property>

<property>
  <name>link.delete.gone</name>
  <value>false</value>
  <description>Whether to delete gone pages from the web graph.</description>
</property>

<property> 
  <name>link.loops.depth</name>
  <value>2</value>
  <description>The depth for the loops algorithm.</description>
</property>

<property>
  <name>link.score.updater.clear.score</name>
  <value>0.0f</value>
  <description>The default score for URL's that are not in the web graph.</description>
</property>

<property>
  <name>mapreduce.fileoutputcommitter.marksuccessfuljobs</name>
  <value>false</value>
  <description>Hadoop >= 0.21 generates SUCCESS files in the output which can crash 
  the readers. This should not be an issue once Nutch is ported to the new MapReduce API
  but for now this parameter should prevent such cases.
  </description>
</property>

<!-- solr index properties -->

<property>
  <name>solr.server.type</name>
  <value>http</value>
  <description>
    Specifies the SolrServer implementation to use. This is a string value
    of one of the following 'cloud', 'concurrent', 'http' or 'lb'.
    The values represent CloudSolrServer, ConcurrentUpdateSolrServer, 
    HttpSolrServer or LBHttpSolrServer respectively.
  </description>
</property>

<property>
  <name>solr.server.url</name>
  <value>http://127.0.0.1:8983/solr/</value>
  <description>
      Defines the Solr URL into which data should be indexed using the
      indexer-solr plugin.
  </description>
</property>

<property>
  <name>solr.zookeeper.url</name>
  <value></value>
  <description>
      Defines the Zookeeper URL which is an essential setting to be used 
      when using SolrCloud. This should be a fully qualified URL similar to
      the property provided within 'solr.server.url' above.
  </description>
</property>

<property>
  <name>solr.loadbalance.urls</name>
  <value></value>
  <description>
      A comma-separated value representing the Solr servers to be used when
      initiating LBHttpSolrServer as the SolrServer implementation. 
  </description>
</property>

<property>
  <name>solr.mapping.file</name>
  <value>solrindex-mapping.xml</value>
  <description>
  Defines the name of the file that will be used in the mapping of internal
  Nutch field names to solr index fields as specified in the target Solr schema.
  </description>
</property>

<property> 
  <name>solr.commit.size</name>
  <value>250</value>
  <description>
  Defines the number of documents to send to Solr in a single update batch.
  Decrease when handling very large documents to prevent Nutch from running
  out of memory. NOTE: It does not explicitly trigger a server side commit.
  </description>
</property>

<property>
  <name>solr.commit.index</name>
  <value>true</value>
  <description>
  When closing the indexer, trigger a commit to the Solr server. 
  </description>
</property>

<property>
  <name>solr.auth</name>
  <value>false</value>
  <description>
  Whether to enable HTTP basic authentication for communicating with Solr.
  Use the solr.auth.username and solr.auth.password properties to configure
  your credentials.
  </description>
</property>

<!-- Elasticsearch properties -->

<property>
  <name>elastic.host</name>
  <value></value>
  <description>Comma-separated list of hostnames to send documents to using
  TransportClient. Either host and port must be defined or cluster.</description>
</property>

<property> 
  <name>elastic.port</name>
  <value>9300</value>
  <description>The port to connect to using TransportClient.</description>
</property>

<property> 
  <name>elastic.cluster</name>
  <value></value>
  <description>The cluster name to discover. Either host and port must be defined
  or cluster.</description>
</property>

<property> 
  <name>elastic.index</name>
  <value>nutch</value> 
  <description>Default index to send documents to.</description>
</property>

<property> 
  <name>elastic.max.bulk.docs</name>
  <value>250</value> 
  <description>Maximum size of the bulk in number of documents.</description>
</property>

<property> 
  <name>elastic.max.bulk.size</name>
  <value>2500500</value> 
  <description>Maximum size of the bulk in bytes.</description>
</property>

<property>
  <name>elastic.exponential.backoff.millis</name>
  <value>100</value>
  <description>Initial delay for the BulkProcessor's exponential backoff policy.
  </description>
</property>

<property>
  <name>elastic.exponential.backoff.retries</name>
  <value>10</value>
  <description>Number of times the BulkProcessor's exponential backoff policy
  should retry bulk operations.</description>
</property>

<property>
  <name>elastic.bulk.close.timeout</name>
  <value>600</value>
  <description>Number of seconds allowed for the BulkProcessor to complete its
  last operation.</description>
</property>

<!-- RabbitMQ indexer properties -->

<property>
  <name>rabbitmq.indexer.server.uri</name>
  <value>amqp://guest:guest@localhost:5672/</value>
  <description>
    URI with connection parameters in the form
    amqp://username:password@hostname:port/virtualHost
    Where:
    username is the username for RabbitMQ server.
    password is the password for RabbitMQ server.
    hostname is where the RabbitMQ server is running.
    port is where the RabbitMQ server is listening.
    virtualHost is where where the exchange is and the user has access.
  </description>
</property>

<property>
  <name>rabbitmq.indexer.binding</name>
  <value>false</value>
  <description>
    Whether the relationship between an exchange and a queue is created
    automatically. Default "false".

    NOTE: Binding between exchanges is not supported.
  </description>
</property>

<property>
  <name>rabbitmq.indexer.binding.arguments</name>
  <value></value>
  <description>
    Arguments used in binding. It must have the form key1=value1,key2=value2.
    This value is only used when the exchange's type is headers and
    the value of 'rabbitmq.indexer.binding' property is true. In other cases
    is ignored.
  </description>
</property>

<property>
  <name>rabbitmq.indexer.exchange.name</name>
  <value></value>
  <description>
    Name for the exchange where the messages will be sent. Default "".
  </description>
</property>

<property>
  <name>rabbitmq.indexer.exchange.options</name>
  <value>type=direct,durable=true</value>
  <description>
    Options used when the exchange is created.
    Only used when the value of 'rabbitmq.indexer.binding' property is true.
    Default "type=direct,durable=true".
  </description>
</property>

<property>
  <name>rabbitmq.indexer.queue.name</name>
  <value>nutch.queue</value>
  <description>
    Name of the queue used to create the binding. Default "nutch.queue".
    Only used when the value of 'rabbitmq.indexer.binding' property is true.
  </description>
</property>

<property>
  <name>rabbitmq.indexer.queue.options</name>
  <value>durable=true,exclusive=false,auto-delete=false</value>
  <description>
    Options used when the queue is created.
    Only used when the value of 'rabbitmq.indexer.binding' property is true.
    Default "durable=true,exclusive=false,auto-delete=false".

    It must have the form
    durable={durable},exclusive={exclusive},auto-delete={auto-delete},arguments={arguments}
    where:
    durable is true or false
    exclusive is true or false
    auto-delete is true or false
    arguments must be the for {key1:value1;key2:value2}
  </description>
</property>

<property>
  <name>rabbitmq.indexer.routingkey</name>
  <value></value>
  <description>
    The routing key used to publish messages to specific queues.
    It is only used when the exchange type is "topic" or "direct". Default
    is the value of 'rabbitmq.indexer.queue.name' property.
  </description>
</property>

<property>
  <name>rabbitmq.indexer.commit.mode</name>
  <value>multiple</value>
  <description>
    "single" if a message contains only one document. In this case a header
    with the action (write, update or delete) will be added.
    "multiple" if a message contains all documents. Default "multiple".
  </description>
</property>

<property>
  <name>rabbitmq.indexer.commit.size</name>
  <value>250</value>
  <description>
    Amount of documents to send into each message if the value of
    'rabbitmq.indexer.commit.mode' property is "multiple". Default "250".
  </description>
</property>

<property>
  <name>rabbitmq.indexer.headers.static</name>
  <value></value>
  <description>
    Headers to add to each message. It must have the form key1=value1,key2=value2.
  </description>
</property>

<property>
  <name>rabbitmq.indexer.headers.dynamic</name>
  <value></value>
  <description>
    Document's fields to add as headers to each message. It must have the form field1,field2.
  </description>
</property>

<!--elasticsearch rest properties-->
<property>
    <name>elastic.rest.host</name>
    <value></value>
    <description>
      The hostname or a list of comma separated hostnames to send documents to
      using Elasticsearch Jest. Both host and port must be defined.
    </description>
</property>

<property>
    <name>elastic.rest.port</name>
    <value></value>
    <description>The port to connect to using Elasticsearch Jest.</description>
</property>

<property>
    <name>elastic.rest.index</name>
    <value>nutch</value>
    <description>Default index to send documents to.</description>
</property>

<property>
    <name>elastic.rest.index.languages</name>
    <value></value>
    <description>
        A list of strings denoting the supported languages (e.g. `en,de,fr,it`).
        If this value is empty all documents will be sent to index ${elastic.rest.index}.
        If not empty the Rest client will distribute documents in different indices based on their `lang` property.
        Indices are named with the following schema: ${elastic.rest.index}${elastic.rest.index.separator}${lang} (e.g. `nutch_de`).
        Entries with an unsupported `lang` value will be added to index ${elastic.rest.index}${elastic.rest.index.separator}${elastic.rest.index.sink} (e.g. `nutch_others`).
    </description>
</property>

<property>
    <name>elastic.rest.index.separator</name>
    <value>_</value>
    <description>
        Default value is `_`. Is used only if `elastic.rest.index.languages` is defined to build the index name (i.e. ${elastic.rest.index}${elastic.rest.index.separator}${lang}). 
    </description>
</property>

<property>
    <name>elastic.rest.index.sink</name>
    <value>others</value>
    <description>
        Default value is `others`. Is used only if `elastic.rest.index.languages` is defined to build the index name where to store documents with unsupported languages (i.e. ${elastic.rest.index}${elastic.rest.index.separator}${elastic.rest.index.sink}).
    </description>
</property>

<property>
    <name>elastic.rest.type</name>
    <value>doc</value>
    <description>Default type to send documents to.</description>
</property>

<property>
    <name>elastic.rest.max.bulk.docs</name>
    <value>250</value>
    <description>Maximum size of the bulk in number of documents.</description>
</property>

<property>
    <name>elastic.rest.max.bulk.size</name>
    <value>26214400</value>
    <description>Maximum size of the bulk in bytes.</description>
</property>

<property>
    <name>elastic.rest.https</name>
    <value>false</value>
    <description>
        "true" to enable https, "false" to disable https
        If you've disabled http access (by forcing https), be sure to
        set this to true, otherwise you might get "connection reset by peer".
    </description>
</property>

<property>
    <name>elastic.rest.user</name>
    <value></value>
    <description>Username for auth credentials (only used when https is enabled)</description>
</property>

<property>
    <name>elastic.rest.password</name>
    <value></value>
    <description>Password for auth credentials (only used when https is enabled)</description>
</property>

<property>
    <name>elastic.rest.trustallhostnames</name>
    <value>false</value>
    <description>
        "true" to trust elasticsearch server's certificate even if its listed domain name does not
        match the domain they are hosted on
        "false" to check if the elasticsearch server's certificate's listed domain is the same domain
        that it is hosted on, and if it doesn't, then fail to index
        (only used when https is enabled)
    </description>
</property>

<!-- subcollection properties -->

<property>
  <name>subcollection.default.fieldname</name>
  <value>subcollection</value>
  <description>
  The default field name for the subcollections.
  </description>
</property>

<!-- Headings plugin properties -->

<property>
  <name>headings</name>
  <value>h1,h2</value>
  <description>Comma separated list of headings to retrieve from the document</description>
</property>

<property>
  <name>headings.multivalued</name>
  <value>false</value>
  <description>Whether to support multivalued headings.</description>
</property>

<!-- mimetype-filter plugin properties -->

<property>
  <name>mimetype.filter.file</name>
  <value>mimetype-filter.txt</value>
  <description>
    The configuration file for the mimetype-filter plugin. This file contains
    the rules used to allow or deny the indexing of certain documents.
  </description>
</property>

<!-- plugin properties that applies to lib-selenium, protocol-selenium,
     protocol-interactiveselenium, lib-htmlunit, protocol-htmlunit -->

<property>
  <name>page.load.delay</name>
  <value>3</value>
  <description>
    The delay in seconds to use when loading a page with htmlunit or selenium. 
  </description>
</property>

<property>
  <name>take.screenshot</name>
  <value>false</value>
  <description>
    Boolean property determining whether the protocol-htmlunit
    WebDriver should capture a screenshot of the URL. If set to
    true remember to define the 'screenshot.location'
    property as this determines the location screenshots should be
    persisted to on HDFS. If that property is not set, screenshots
    are simply discarded.
  </description>
</property>

<property>
  <name>screenshot.location</name>
  <value></value>
  <description>
    The location on disk where a URL screenshot should be saved
    to if the 'take.screenshot' property is set to true.
    By default this is null, in this case screenshots held in memory
    are simply discarded.
  </description>
</property>

<!-- lib-htmlunit plugin properties; applies to protocol-htmlunit -->

<property>
  <name>htmlunit.enable.javascript</name>
  <value>true</value>
  <description>
    A Boolean value representing if javascript should
    be enabled or disabled when using htmlunit. The default value is enabled. 
  </description>
</property>

<property>
  <name>htmlunit.javascript.timeout</name>
  <value>3500</value>
  <description>
    The timeout in milliseconds when loading javascript with lib-htmlunit. This
    setting is used by protocol-htmlunit since they depending on 
    lib-htmlunit for fetching.
  </description>
</property>

<property>
  <name>htmlunit.enable.css</name>
  <value>false</value>
  <description>
    A Boolean value representing if CSS should
    be enabled or disabled when using htmlunit. The default value is disabled.
  </description>
</property>

<!-- protocol-selenium plugin properties -->

<property>
  <name>selenium.driver</name>
  <value>firefox</value>
  <description>
    A String value representing the flavour of Selenium 
    WebDriver() to use. Currently the following options
    exist - 'firefox', 'chrome', 'safari', 'opera', 'phantomjs' and 'remote'.
    If 'remote' is used it is essential to also set correct properties for
    'selenium.hub.port', 'selenium.hub.path', 'selenium.hub.host',
    'selenium.hub.protocol', 'selenium.grid.driver' and 'selenium.grid.binary'.
  </description>
</property>

<property>
  <name>selenium.hub.port</name>
  <value>4444</value>
  <description>Selenium Hub Location connection port</description>
</property>

<property>
  <name>selenium.hub.path</name>
  <value>/wd/hub</value>
  <description>Selenium Hub Location connection path</description>
</property>

<property>
  <name>selenium.hub.host</name>
  <value>localhost</value>
  <description>Selenium Hub Location connection host</description>
</property>

<property>
  <name>selenium.hub.protocol</name>
  <value>http</value>
  <description>Selenium Hub Location connection protocol</description>
</property>

<property>
  <name>selenium.grid.driver</name>
  <value>firefox</value>
  <description>A String value representing the flavour of Selenium 
    WebDriver() used on the selenium grid. Currently the following options
    exist - 'firefox', 'phantomjs' </description>
</property>

<property>
  <name>selenium.grid.binary</name>
  <value></value>
  <description>A String value representing the path to the browser binary 
    location for each node
 </description>
</property>

<!-- selenium firefox configuration; 
     applies to protocol-selenium and protocol-interactiveselenium plugins -->
<property>
  <name>selenium.firefox.allowed.hosts</name>
  <value>localhost</value>
  <description>A String value representing the allowed hosts preference
  according to the operating system hosts file (Example - /etc/hosts in Unix). 
  Currently this option exist for - 'firefox' </description>
</property>

<property>
  <name>selenium.firefox.binary.timeout</name>
  <value>45</value>
  <description>A Long value representing the timeout value
  for firefox to be available for command execution. The value is in seconds. 
  Currently this option exist for - 'firefox' </description>
</property>

<property>
  <name>selenium.firefox.enable.flash</name>
  <value>false</value>
  <description>A Boolean value representing if flash should
  be enabled or disabled. The default value is disabled. 
  Currently this option exist for - 'firefox' </description>
</property>

<property>
  <name>selenium.firefox.load.image</name>
  <value>1</value>
  <description>An Integer value representing the restriction on
  loading images. The default value is no restriction i.e. load all images.
  Other options are:
  1: Load all images, regardless of origin
  2: Block all images
  3: Prevent third-party images from loading 
  Currently this option exist for - 'firefox' </description>
</property>

<property>
  <name>selenium.firefox.load.stylesheet</name>
  <value>1</value>
  <description>An Integer value representing the restriction on
  loading stylesheet. The default value is no restriction i.e. load 
  all stylesheet.
  Other options are:
  1: Load all stylesheet
  2: Block all stylesheet
  Currently this option exist for - 'firefox' </description>
</property>

<!-- protocol-interactiveselenium configuration -->
<property>
  <name>interactiveselenium.handlers</name>
  <value>DefaultHandler</value>
  <description>
    A comma separated list of Selenium handlers that should be run for a given
    URL. The DefaultHandler causes the same functionality as protocol-selenium.
    Custom handlers can be implemented in the plugin package and included here.
  </description>
</property>

<property>
  <name>store.http.request</name>
  <value>false</value>
  <description>
    Store the raw request made by Nutch, required to use the CommonCrawlDataDumper
    tool for the WARC format.
  </description>
</property>

<property>
  <name>store.http.headers</name>
  <value>false</value>
  <description>
    Store the raw headers received by Nutch from the server, required to use the 
    CommonCrawlDataDumper tool for the WARC format.
  </description>
</property>

<!-- index-links plugin -->

<property>
  <name>index.links.outlinks.host.ignore</name>
  <value>false</value>
  <description>
    Ignore outlinks that point out to the same host as the URL being indexed. 
    By default all outlinks are indexed. If db.ignore.internal.links is true (default
    value), this setting does nothing since the internal links are already
    ignored.
  </description>
</property>

<property>
  <name>index.links.inlinks.host.ignore</name>
  <value>false</value>
  <description>
    Ignore inlinks coming from the same host as the URL being indexed. By default 
    all inlinks are indexed. If db.ignore.internal.links is true (default
    value), this setting does nothing since the internal links are already
    ignored.
  </description>
</property>

<property>
  <name>index.links.hosts.only</name>
  <value>false</value>
  <description>
    This force the index-links plugin to only index the host portion of the inlinks
    or outlinks.
  </description>
</property>

<!-- HostDB settings -->
<property>
  <name>hostdb.recheck.interval</name>
  <value>86400000</value>
  <description>
    Interval between rechecks in milliseconds. Default is one week. Recheck
    interval is multiplied by the number of DNS lookup failures for a given
    host.
  </description>
</property>

<property>
  <name>hostdb.purge.failed.hosts.threshold</name>
  <value>3</value>
  <description>
    If hosts have more failed DNS lookups than this threshold, they are
    removed from the HostDB. Hosts can, of course, return if they are still
    present in the CrawlDB.
  </description>
</property>

<property>
  <name>hostdb.num.resolvers.threads</name>
  <value>25</value>
  <description>
    Number of resolver threads per reducer. Make sure your DNS resolver is
    capable of handling this value multiplied by the number of reducers.
  </description>
</property>

<property>
  <name>hostdb.check.failed</name>
  <value>true</value>
  <description>
    True if hosts for which DNS lookup failed are eligible for recheck. If
    false, hosts that failed DNS lookup more than 0 times are not eligible
    for DNS lookup.
  </description>
</property>

<property>
  <name>hostdb.check.new</name>
  <value>true</value>
  <description>
    True if newly discovered hosts eligible for DNS lookup check. If false,
    hosts that are just added to the HostDB are not eligible for DNS lookup.
  </description>
</property>

<property>
  <name>hostdb.check.known</name>
  <value>true</value>
  <description>
    True if newly already known hosts eligible for DNS lookup check. If false,
    known hosts are not eligible for DNS lookup.
  </description>
</property>

<property>
  <name>hostdb.force.check</name>
  <value>false</value>
  <description>
    If true hosts are checked regardless of their respective recheck
    intervals or status.
  </description>
</property>

<property>
  <name>hostdb.url.filter</name>
  <value>false</value>
  <description>
    Whether the records are to be passed through configured filters.
  </description>
</property>

<property>
  <name>hostdb.url.normalize</name>
  <value>false</value>
  <description>
    Whether the records are to be passed through configured normalizers.
  </description>
</property>

<property>
  <name>hostdb.numeric.fields</name>
  <value>_rs_</value>
  <description>
    Comma-separated list of CrawlDatum metadata fields for which aggregations are needed.
  </description>
</property>

<property>
  <name>hostdb.string.fields</name>
  <value>Content-Type</value>
  <description>
    Comma-separated list of CrawlDatum metadata fields for which sums are needed.
  </description>
</property>

<property>
  <name>hostdb.percentiles</name>
  <value>50,75,95,99</value>
  <description>
    Comma-separated list of percentiles that must be calculated for all numeric
    field aggregations. Host metadata will contain fields for each percentile.
  </description>
</property>

<!-- publisher properties 
      Do not forget to add the name of your publisher implementation 
      in plugin.includes ex- publish-rabbitmq -->
<property>
  <name>publisher.queue.type</name>
  <value></value>
  <description>
    Choose the type of Queue being used (ex - RabbitMQ, ActiveMq, Kafka, etc). 
    Currently there exists an implemtation for RabbitMQ producer. 
  </description>
</property>

<property>
  <name>publisher.order</name>
  <value></value>
  <description>
    The order in which the publisher queues would be loaded
  </description>
</property>

<!-- RabbitMQ publisher properties -->

<property>
  <name>rabbitmq.publisher.server.uri</name>
  <value>amqp://guest:guest@localhost:5672/</value>
  <description>
    URI with connection parameters in the form
    amqp://username:password@hostname:port/virtualHost
    where:
    username is the username for RabbitMQ server.
    password is the password for RabbitMQ server.
    hostname is where the RabbitMQ server is running.
    port is where the RabbitMQ server is listening.
    virtualHost is where where the exchange is and the user has access.
  </description>
</property>

<property>
  <name>rabbitmq.publisher.binding</name>
  <value>false</value>
  <description>
    Whether the relationship between an exchange and a queue is created
    automatically. Default "false".

    NOTE: Binding between exchanges is not supported.
  </description>
</property>

<property>
  <name>rabbitmq.publisher.binding.arguments</name>
  <value></value>
  <description>
    Arguments used in binding. It must have the form key1=value1,key2=value2.
    This value is only used when the exchange's type is headers and
    the value of 'rabbitmq.publisher.binding' property is true. In other cases
    is ignored.
  </description>
</property>

<property>
  <name>rabbitmq.publisher.exchange.name</name>
  <value></value>
  <description>
    Name for the exchange where the messages will be sent. Default "".
  </description>
</property>

<property>
  <name>rabbitmq.publisher.exchange.options</name>
  <value>type=direct,durable=true</value>
  <description>
    Options used when the exchange is created.
    Only used when the value of 'rabbitmq.publisher.binding' property is true.
    Default "type=direct,durable=true".
  </description>
</property>

<property>
  <name>rabbitmq.publisher.queue.name</name>
  <value>nutch.events.queue</value>
  <description>
    Name of the queue used to create the binding. Default "nutch.queue".
    Only used when the value of 'rabbitmq.publisher.binding' property is true.
  </description>
</property>

<property>
  <name>rabbitmq.publisher.queue.options</name>
  <value>durable=true,exclusive=false,auto-delete=false</value>
  <description>
    Options used when the queue is created.
    Only used when the value of 'rabbitmq.publisher.binding' property is true.
    Default "durable=true,exclusive=false,auto-delete=false".

    It must have the form
    durable={durable},exclusive={exclusive},auto-delete={auto-delete},arguments={arguments}
    where:
    durable is true or false
    exclusive is true or false
    auto-delete is true or false
    arguments must be the for {key1:value1;key2:value2}
  </description>
</property>

<property>
  <name>rabbitmq.publisher.routingkey</name>
  <value></value>
  <description>
    The routing key used to publish messages to specific queues.
    It is only used when the exchange type is "topic" or "direct". Default
    is the value of 'rabbitmq.publisher.queue.name' property.
  </description>
</property>

<property>
  <name>rabbitmq.publisher.headers.static</name>
  <value></value>
  <description>
    Headers to add to each message. It must have the form key1=value1,key2=value2.
  </description>
</property>

<!-- sitemap properties -->

<property>
  <name>sitemap.strict.parsing</name>
  <value>true</value>
  <description>
If true (default) the Sitemap parser rejects URLs not sharing the same
    prefix with the sitemap: a sitemap `http://example.com/catalog/sitemap.xml'
    may only contain URLs starting with `http://example.com/catalog/'.
    All other URLs are skipped.  If false the parser will allow any URLs contained
    in the sitemap.
  </description>
</property>

<property>
  <name>sitemap.url.filter</name>
  <value>true</value>
  <description>
    Filter URLs from sitemaps.
  </description>
</property>

<property>
  <name>sitemap.url.normalize</name>
  <value>true</value>
  <description>
    Normalize URLs from sitemaps.
   </description>
</property>

<property>
  <name>sitemap.url.default.sitemap.xml</name>
  <value>true</value>
  <description>
    Always try &lt;host&gt;/sitemap.xml root even if no sitemap
    is announced in /robots.txt.
   </description>
</property>

<property>
  <name>sitemap.url.overwrite.existing</name>
  <value>false</value>
  <description>
    If true, the record's existing modified time, interval and score are
    overwritten by the information in the sitemap. WARNING: overwriting
    these values may have unexpected effects on what is crawled. Use this
    only if you can trust the sitemap and if the values in the sitemap do
    fit with your crawler configuration.
   </description>
</property>

<property>
  <name>sitemap.redir.max</name>
  <value>3</value>
  <description>
    Maximum number of redirects to follow.
   </description>
</property>
</configuration>
