Using different analyzers in index-time and query-time

Assume that we want to provide a search facility using Neo4j. We want that:

  1. if someone's name is Alireza we want to retrieve it when the query is Ali
  2. if the query is Alireza we do not want to retrieve those with name Ali.

Another usecase is that if someone searches for Micheline, we do not want to retrieve texts that contain Microphone, when we use 3-grams.

It seems that Neo4j uses the same analyzer in both the index-time and query-time. This causes that if we use n-gram analyzer in order to be able to retrieve the result in case #1, the query is converted to n-grams in case #2, so the result of case #2 is wrong.

What is the solution? My proposal is to allow two different analyzers to be used in index-time and query-time.