As updates have been released, the search function has been expanded. This image shows all of the ways you can filter your search:
(Image originally posted here)
At the time of the introduction of the search function, this is what was available:
This site has all of the search bar filters listed. From the site, the filters you can search by are:
Name: Searching by nickname will return that individual Pokémon. Searching by species name will return all Pokémon of a species, ignoring nicknames.
Type: Searching by "type" or "type, type" (can also use a semicolon or colon) will return all Pokémon with that typing (multiple types will return all of type A and all of type B, not only Pokémon with typing A/B, though those would show up as well).
Species group: Searching by "+species" will return all Pokémon in that evolutionary chain. It doesn't matter which Pokémon in the chain you search for. "+Bulbasaur" returns the same results and "+Ivysaur".
Note: This has been noted to only work for Pokémon you currently have in your Box when you do the search. If you do not have Kakuna in your Box, but have Beedrill and Weedle, then "+kakuna" would return no results, while "+weedle" and "+beedrill" would return themselves and each other.
Pokédex Number: Searching by a number or range of numbers will return all Pokémon that match the criteria. e.g. "1" will return Bulbasaur, whereas "1-3" would return Bulbasaur-Venusaur.
CP and HP: Searching for CP/HP number ranges is done by searching for "cp###-###" or "hp###-###" and will return all Pokémon with CP/HP in the queried range.
Evolution: Simply searching "evolve" will display only Pokémon that are currently able to be evolved. Currently, this will display Pokémon who cannot evolve due to not having an evolutionary item, but this will be fixed in the future.
You can combine searches by partitioning them with commas, semicolons, or colons.
The search bar doesn't care about whitespace between terms. "cp ###" works the same as "cp###".
Specifying ranges can be done in either ascending or descending order. The results will be the same for "cp10-150" as "cp150-10".
If playing Pokémon Go in a language other than English, search terms must be used the way they are displayed. That is "evolve" won't work when playing the game in German.
Letters with accents are distinct from letters without them, so if a Pokémon's name or other search term is accented, you must use the accented character for the search to return the proper results.
(additional findings from here)