2011-01-09 10 views
3

Certains de mes champs indexés utilisent un analyseur grec et je souhaite utiliser un analyseur anglais pour d'autres champs. Mon problème est: Lors de la recherche de résultats (avec un MultiFieldQueryParser actuellement), comment utiliser un analyseur différent par champ, de sorte qu'un analyseur grec est utilisé pour les champs indexés en grec et qu'un analyseur anglais est utilisé pour les champs indexés en anglais?(HibernateSearch) Analyseur différent MultiFieldQueryParser par champ

Répondre

0

Vous pouvez construire votre analyseur de requête comme ceci:

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

qui utiliseraient l'analyseur approprié, tel que défini dans les annotations de votre classe d'objet:

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

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

Voici la solution que j'ai trouvée. Commentez s'il vous plaît.

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; 
Questions connexes