Pregunta

Algunos de mis campos indexados utilizar un analizador de griego y quiero usar un analizador de Inglés para algunos otros campos. Mi problema es: Durante la búsqueda de resultados (con un MultiFieldQueryParser actualmente), ¿cómo puedo usar un analizador diferente por campo, por lo que un analizador griega se utiliza para campos indizados-griego y un analizador de Inglés se utiliza para campos Inglés-indexado

¿Fue útil?

Solución

Se puede construir el analizador de consulta como la siguiente:

Analyzer analyzer = fullTextSession.getSearchFactory().getAnalyzer(Item.class);
QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_31, fields, analyzer);

que pueden utilizar el analizador adecuado, tal como se define en las anotaciones de la clase de artículo:

@Field(name = "greekTitle" analyzer = @Analyzer(impl = GreekAnalyzer.class))
public void getGreekTitle(){
 //...
}

@Field(name = "englishTitle" analyzer = @Analyzer(impl = StandardAnalyzer.class))
public void getEnglishTitle(){
 //...
}

Otros consejos

Esta es la solución que encontré. Por favor comentario.

transaction.begin();

PerFieldAnalyzerWrapper wrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(Version.LUCENE_30));

wrapper.addAnalyzer("greekTitle", new GreekAnalyzer(Version.LUCENE_30));
wrapper.addAnalyzer("greekDescription", new GreekAnalyzer(Version.LUCENE_30));

String[] fields = {"greekTitle", "greekDescription", "englishTitle", "englishDescription"};

QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30, fields, wrapper);
queryParser.setDefaultOperator(QueryParser.AND_OPERATOR);
org.apache.lucene.search.Query query = queryParser.parse(QueryParser.escape(queryString));

javax.persistence.Query persistenceQuery = 
fullTextEntityManager.createFullTextQuery(query, Item.class);

@SuppressWarnings("unchecked")
List<Item> result = persistenceQuery.getResultList();

transaction.commit();

return result;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top