firstly you are right to spot that TextNumericSearch doesn't take a settings parameter. I shall fix this for the next release.
Secondly, you can exclude entries with specific elements using the search_settings class:
search_settings.must_not_have_elements = [
'Ar', 'K', ...
from ccdc.molecule import Atom
ats = 
for i in range(18, 93):
ats[-1].atomic_number = i
search_settings.must_not_have_elements = [a.atomic_symbol for a in ats]
This is slightly clumsy because there is no atomic_number keyword for Atom creation.
Thirdly you don't have to use a bogus search to extract all entries of a database matching specific search criteria. You can set up the search_settings as above, then iterate over the csd:
from ccdc import io
csd = io.EntryReader('csd')
for e in csd:
Fourthly the year range is a pair of numbers, interpreted as an inclusive range, rather than the list of values you have given. The first two values of the range have been used as the inclusive range, so you are getting hits from 1970-1971. The query should be written:
It would have been helpful if the API had made this clear.
Lastly, it is perhaps counter-intuitive that a TextNumericSearch with no criteria returns no hits. It would probably be better to raise an exception as the other classes do. I shall consider this for the next release.
Thank you for your questions; it is feedback like this that helps me to make the API better.