Helper function to create a QueryParser.
    
    Parameters:
        default_field: the default field to search against for non-field
                        queries
        plugins: a list of plugins to use when parsing
        schema: If provided, a schema to check fieldnames against. If not
                provided, any query of the form "foo:bar" will yield searches
                against the "foo" field; if provided and "foo" is not a field,
                then the search will look for "foo bar" in the default_field.
                NOTE: If provided, search queries MUST use unicode
        int_fields: A list of fields that expect integer values from
                    CloudSearch
        yesno_fields: A list of fields to convert "yes" and "no" queries to
                      boolean 1 / 0 searches
        aliases: A dictionary of aliases to use for the AliasPlugin

def make_parser(default_field='text', plugins=DEFAULT_PLUGINS, schema=None,
                int_fields=None, yesno_fields=None, aliases=None):
    '''Helper function to create a QueryParser.
    
    Parameters:
        default_field: the default field to search against for non-field
                        queries
        plugins: a list of plugins to use when parsing
        schema: If provided, a schema to check fieldnames against. If not
                provided, any query of the form "foo:bar" will yield searches
                against the "foo" field; if provided and "foo" is not a field,
                then the search will look for "foo bar" in the default_field.
                NOTE: If provided, search queries MUST use unicode
        int_fields: A list of fields that expect integer values from
                    CloudSearch
        yesno_fields: A list of fields to convert "yes" and "no" queries to
                      boolean 1 / 0 searches
        aliases: A dictionary of aliases to use for the AliasPlugin
    
    '''
    parser = whoosh.qparser.default.QueryParser(default_field, schema,
                                                plugins=plugins)
    parser_parse = parser.parse
    def parse(text, *args, **kwargs):
        assert isinstance(text, unicode), 'Cannot parse non-unicode objects (%r)' % text
        return parser_parse(text, *args, **kwargs)
    parser.parse = parse
    parser.parse.__doc__ = parser_parse.__doc__
    if int_fields:
        parser.add_plugin(IntNodePlugin(int_fields))
    if yesno_fields:
        parser.add_plugin(YesNoPlugin(yesno_fields))
    if aliases:
        parser.add_plugin(FieldAliasPlugin(aliases))
    return parser