analizador diferente (HibernateSearch) MultiFieldQueryParser por campo
-
09-10-2019 - |
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 / p>
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