Here is a good explanation of the logics from the documentation: https://goo.gl/TkGtbt
The logic applies per object level. Meaning that each separate object is tested individually for every phrase entered. For the regular engine (default) each custom field is a separate object. So the AND logic will not match if one of the phrases matches one custom field only and another phrase matches another custom field.
To resolve this, the index table was implemented. It basically gathers the selected field into one “text cloud” and counts the occurences and indexes each word individually – but as one single field. Therefore texts from the selected multiple custom fields (and all the other sources) are not distungished from each other.
For more information about using the index table, you can check this chapter in the documentation: https://goo.gl/ooNYPYBest,
If you like my products, don't forget to rate them on codecanyon :)