def train(req, author, content, ip, spam=True):
    """Train the filter by reporting a false negative or positive.

        The spam keyword argument is `True` if the content should be considered
        spam (a false negative), and `False` if the content was legitimate (a
        false positive).

        returns
           0 (no training),
           1 (training ok),
          -1 (training error) or
          -2 (missing preconditions, e.g. keys)
        """
