Comme vous l'avez mentionné, il s'agit d'une dupe de this question. Je vous suggère au moins d'ajouter un lien dans votre question. De plus, je vous invite à créer un compte d'utilisateur, car pour l'instant, il n'est pas possible de regarder votre ancienne question pour obtenir un contexte.
Le StandardAnalyzer
gère spécifiquement les acronymes et convertit les C.F.A. (par exemple) à cfa. Cela signifie que vous devriez être capable de faire la recherche, à condition de vous assurer que vous utilisez le même analyseur pour l'indexation et pour l'analyse des requêtes.
Je vous suggérerais d'exécuter quelques cas de test de base pour éliminer d'autres facteurs. Essayez d'utiliser un QueryParser
ordinaire au lieu d'un multi-champ.
est ici un code que j'ai écrit à jouer avec le StandardAnalyzer
:
StringReader testReader = new StringReader("C.F.A. C.F.A word");
StandardAnalyzer analyzer = new StandardAnalyzer();
TokenStream tokenStream = analyzer.tokenStream("title", testReader);
System.out.println(tokenStream.next());
System.out.println(tokenStream.next());
System.out.println(tokenStream.next());
La sortie pour cela, par la voie était:
(cfa,0,6,type=<ACRONYM>)
(c.f.a,7,12,type=<HOST>)
(word,13,17,type=<ALPHANUM>)
note, par exemple, que si l'acronyme n » t se termine par un point puis l'analyseur suppose qu'il s'agit d'un nom d'hôte Internet, donc la recherche de "CFA" ne correspondra pas à "CFA" dans le texte.