How to search against a specific field/s, and not every field related to an element? I have the below. I want to only show results that contain the query in the the username or fullName attributes.

Because currently if I search for say Tom the search results will return users without a username or full name containing the query Tom, but will show a person if the email contains it. I don't want this as emails are not publicly shown and therefore may cause confusion to the user searching. 

How would I exclude email from the search criteria or only allow searching from the username or fullName attribute?

The same happens when searching entries - how do I narrow the search to only use the title field for example otherwise the search results can be too broad which is bad for UX.

{% set users = craft.users()
    .search(query)
    .group('creatives')
    .all() %}

{% if users|length %}
    &lt;p&gt;{{users|length }} results:&lt;/p&gt;

    &lt;ul&gt;
        {% for user in users %}
           &lt;li&gt;&lt;a href="/people/{{ user.username }}"&gt;{{ user.username }}&lt;/a&gt;&lt;/li&gt;
        {% endfor %}
    &lt;/ul&gt;
{% else %}
    &lt;p&gt;Your search for {{ query }} didn&amp;#39t return any users.&lt;/p&gt;
{% endif %}
You can just limit your search to those specific user fields.
It should go something like:
{% set users = craft.users()
    .search('fullName:' ~ query ~ ' OR username:' ~ query)
    .group('creatives')
    .all() %}

More info on searching here: https://docs.craftcms.com/v3/searching.html#supported-syntaxes
Top tip: You can test your search query directly in the search bar within Craft's admin. e.g. See if fullName:Tom OR username:Tom pulls the intended results.