インデックス付きのフィールドのいくつかはギリシャ語のアナライザーを使用しており、他のいくつかのフィールドには英語のアナライザーを使用したいと思います。私の問題は次のとおりです。(現在MultiFieldQueryParserを使用して)結果を検索する場合、フィールドごとに異なるアナライザーを使用して、ギリシャ語のアナライザーをギリシャ語のインデックス付きフィールドに使用し、英語のアナライザーを英語のインデックス付きフィールドに使用するにはどうすればよいですか?
質問する
1554 次
2 に答える
1
これが私が見つけた解決策です。コメントしてください。
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;
于 2011-01-10T06:29:48.147 に答える
0
次のようにクエリパーサーを構築できます。
Analyzer analyzer = fullTextSession.getSearchFactory().getAnalyzer(Item.class);
QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_31, fields, analyzer);
Itemクラスのアノテーションで定義されているように、適切なアナライザーを使用します。
@Field(name = "greekTitle" analyzer = @Analyzer(impl = GreekAnalyzer.class))
public void getGreekTitle(){
//...
}
@Field(name = "englishTitle" analyzer = @Analyzer(impl = StandardAnalyzer.class))
public void getEnglishTitle(){
//...
}
于 2012-08-29T19:08:40.900 に答える