2011-01-09 14 views
3

インデックス付きフィールドの一部にはギリシャ語のアナライザーが使用されており、他のフィールドには英語のアナライザーを使用したいと考えています。私の問題は次のとおりです:現在、MultiFieldQueryParserを使用して結果を検索するとき、フィールドごとに異なるアナライザを使用するとギリシャ語のアナライザがギリシャ語のフィールドに使用され、英語のアナライザは英語のフィールドに使用されます。(HibernateSearch)フィールドごとに異なるアナライザーMultiFieldQueryParser

答えて

0

あなたはこのようなあなたのクエリパーサーを構築することができます:あなたのItemクラスの注釈で定義されているように、適切なアナライザを使用することになり

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

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

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

ここに私が見つけた解決策があります。コメントしてください。

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; 
関連する問題