catalog = plone.api.portal.get_tool('portal_catalog')
results = catalog(author="Hemingway", year=1960, searchable_title="some title")
Metadata with fixed values like years are easy to search. Performing fulltext searches on text is always a challenge and require some understanding of the sort of queries to be used and the technical understanding to figure your indexes properly...
The core problem with fulltext search in Plone is that the functionality is very limited and two decades behind what people expect from a fulltext search. Plone throws basically all content into a bag, handling title, description and body text equally. The general recommendation when you need a serious fulltext search in Plone: throw the build-in FT search away and replace with with Solr or Elasticsearch