2011-01-09 6 views
3

Einige meiner indizierten Felder verwenden einen griechischen Analysator und ich möchte einen englischen Analysator für einige andere Felder verwenden. Mein Problem ist: Wie kann ich bei der Suche nach Ergebnissen (mit einem MultiFieldQueryParser) einen anderen Analysator pro Feld verwenden, so dass ein griechischer Analysator für griechisch indizierte Felder und ein englischer Analysator für englisch indizierte Felder verwendet wird?(HibernateSearch) MultiFieldQueryParser unterschiedlicher Analyzer pro Feld

Antwort

0

Sie könnten Ihre Abfrageparser wie folgt aufbauen:

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

, die die richtige Analysator verwenden würde, wie in den Anmerkungen Ihrer Item-Klasse definiert:

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

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

Hier ist die Lösung, die ich gefunden habe. Bitte kommentieren.

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;