Hibernate Search Vs "Letra A"

Opa pessoal, blz novamente! Seguinte: nos últimos 2 dias andei tentando implementar o Hibernate Search, só que nas últimas horas andei percebendo que o sistema ainda não é tão legal quanto eu achava que seria (ou eu não estou sabendo implementar direito). O exemplo do meu tópico anterior ( http://www.guj.com.br/java/301354-erro-com-o-hibernate-search-resolvido) não englobava fazer um teste inicial de uma busca começando com a “letra A”. Se eu quisesse, por exemplo, listar todos os clientes de uma empresa que começam com a letra A já inviabiliza o uso do Search, por conta da letra usar uma “stop word”, que está presente dentro do Analyser. Se eu tento fazer algo assim:

luceneQuery = queryBuilder.keyword().onField(colunaBanco) .matching(valorBusca).createQuery();

Ocorre um erro por conta do “A” ser uma stop word, tipo “do”, “da”, etc. Até tentei adaptar o tutorial do blog da Caelum (http://blog.caelum.com.br/hibernate-search-com-lucene/) e trocar o Analyser, mas também não funcionou. O stacktrace do erro gera assim:

Então gostaria de alguma ajuda de quem conseguiu implementar o Hibernate Search. Vocês conseguiram fazer buscas usando uma “letra A”? Isso é realmente impossível? É possível? Se eu tenho um valor do tipo “A Relíquia”, ele acha o valor se eu procuro pela letra “R”, mas não consegue pela letra “A” (do meu exemplo do tópico anterior) e gera o erro se eu faço um lucenequery com o tipo acima. Se alguém souber e quiser passar uma dica, agradeço imensamente.

O meu código inteiro da função tinha ficado assim:

[code]public List getDadosLucene(Class classe, String valorBusca,
String colunaBanco, int tipoBusca) throws ParseException {
Session sessao = factory.openSession();

	//String[] words = { "de", "do", "da", "dos", "das", "o", "na", "no","em" };

	Set<String> set = new HashSet<String>();
	set.add("de");
	set.add("do"); // ,"da","dos","das","o","na","no","em"

	QueryParser parser = new QueryParser(Version.LUCENE_36, colunaBanco,
			new StopAnalyzer(Version.LUCENE_36, set));
	org.apache.lucene.search.Query luceneQuery;

	FullTextSession ftSession = Search.getFullTextSession((sessao));
	QueryBuilder queryBuilder = ftSession.getSearchFactory()
			.buildQueryBuilder().forEntity(classe).get();

	try {
		switch (tipoBusca) {
		case Funcoes.BUSCA_IGUAL:
			luceneQuery = parser.parse(colunaBanco + ":" + valorBusca + "");
			break;
		case Funcoes.BUSCA_COMECE_COM:
			luceneQuery = parser
					.parse(colunaBanco + ":" + valorBusca + "*");
			break;
		case Funcoes.BUSCA_CONTENHA:

			luceneQuery = queryBuilder.keyword().onField(colunaBanco)
					.matching(valorBusca).createQuery();

			break;
		case Funcoes.BUSCA_TERMINE_COM:
			luceneQuery = parser
					.parse(colunaBanco + ":*" + valorBusca + "");
			break;
		default:
			luceneQuery = parser.parse(colunaBanco + ":" + valorBusca + "");
		}
	} catch (ParseException e) {
		throw new RuntimeException("Unable to parse query: " + valorBusca,
				e);
	}

	org.hibernate.Query query = ftSession.createFullTextQuery(luceneQuery);

	return query.list();

}[/code]

O problema pode estar acontecendo devido a configuração do hibernate search nas entidades.

Existe uma serie de filtros que pode aplicar no modelo.
Exemplos com relação ao tamanho, LengthFilterFactory, EdgeNGramFilterFactory.

Referencia:
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters