For "multi-index" searches I use one index to perform the search on my primary, then simply loop through the iterator until I either find the item I'm looking for with the matching secondary key.
Obviously, you should search first with the key that will return the fewest matches so that the loop can abort as soon as the iterator's primary key no longer matches what you are looking for.
auto idx = fileReceipts.template get_index<N(byfid)>();
auto matchingItem = idx.lower_bound(fID);
// Advance to the first entry matching the specified vID
while (matchingItem != idx.end() && matchingItem->fID == fID &&
matchingItem->vID != vID && matchingItem->user != user) {
matchingItem++;
}
if (matchingItem != idx.end() && matchingItem->fID == fID &&
matchingItem->vID == vID && matchingItem->user == user) {
// Perform whatever operation you wish on the matchingItem
}