3
我的一些索引字段使用希臘語分析器,我想爲其他字段使用英語分析器。我的問題是:在搜索結果時(使用MultiFieldQueryParser當前),如何使用每個字段的不同分析器,以便希臘語分析器用於希臘語索引字段,而英語分析器用於英語索引字段?(HibernateSearch)MultiFieldQueryParser每個字段的不同分析器
我的一些索引字段使用希臘語分析器,我想爲其他字段使用英語分析器。我的問題是:在搜索結果時(使用MultiFieldQueryParser當前),如何使用每個字段的不同分析器,以便希臘語分析器用於希臘語索引字段,而英語分析器用於英語索引字段?(HibernateSearch)MultiFieldQueryParser每個字段的不同分析器
你可以建立你的查詢分析器這樣的:
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(){
//...
}
這是我找到的解決方案。請給出意見。
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;